问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Pro*C中COMMIT WORK 和 COMMIT WORK RELEASE的区别

发布网友 发布时间:2022-04-25 00:26

我来回答

1个回答

热心网友 时间:2023-10-17 12:23

  首先说明的是COMMIT WORK RELEASE是Pro*C的语法,ORACLE的SQLPLUS和PL/SQL块中不支持这样的写法。
  譬如:

  [oracle@huateng c]$ sqlplus / as sysdba
  SQL*Plus: Release 11.2.0.1.0 Proction on Mon Jan 9 20:43:10 2012
  Copyright (c) 1982, 2009, Oracle. All rights reserved.

  Connected to:
  Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Proction
  With the Partitioning, OLAP, Data Mining and Real Application Testing options
  SQL> COMMIT WORK;
  Commit complete.
  SQL> COMMIT WORK RELEASE;
  COMMIT WORK RELEASE
  *
  ERROR at line 1:
  ORA-02185: a token other than WORK follows COMMIT

  SQL> BEGIN
  2 COMMIT WORK;
  3 END;
  4 /
  PL/SQL procere successfully completed.
  SQL> BEGIN
  2 COMMIT WORK RELEASE;
  3 END;
  4 /
  COMMIT WORK RELEASE;
  *
  ERROR at line 2:
  ORA-06550: line 2, column 15:
  PL/SQL: ORA-02185: a token other than WORK follows COMMIT
  ORA-06550: line 2, column 3:
  PL/SQL: SQL Statement ignored

  SQL>

  在Pro*C中 COMMIT WORK 会提交事务并释放所有的锁定及其资源,而COMMIT WORK RELEASE会提交事务并释放所有的锁定及其资源
  然后断开与数据库的连接,以后所有的与数据库操作的命令都会报ORA-01012错误。
  看如下一个简单的Pro*C程序:
  [oracle@huateng c]$ cat commit.pc
  #include <stdio.h>
  #include <string.h>
  exec sql include sqlca;
  void main()
  {
  exec sql begin declare section;
  char *username="scott";
  char *password="tiger";
  char ename[30];
  exec sql end declare section;
  exec sql connect :username identified by :password;
  exec sql commit work;
  exec sql select ename into :ename from emp where empno=7788;
  printf("sqlcode=[%d],ename=[%s]\n",sqlca.sqlcode,ename);
  exec sql commit work release;
  exec sql select ename into :ename from emp where empno=7839;
  printf("sqlcode=[%d],ename=[%s]\n",sqlca.sqlcode,ename);
  exec sql connect :username identified by :password;
  exec sql select ename into :ename from emp where empno=7844;
  printf("sqlcode=[%d],ename=[%s]\n",sqlca.sqlcode,ename);
  return;
  }
  [oracle@huateng c]$ proc parse=none commit.pc
  Pro*C/C++: Release 11.2.0.1.0 - Proction on Mon Jan 9 21:05:47 2012
  Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
  System default option values taken from: /appsdata/oracle/proct/db11gr2/precomp/admin/pcscfg.cfg
  [oracle@huateng c]$ gcc commit.c -o commit -lclntsh -L $ORACLE_HOME/lib
  [oracle@huateng c]$ ./commit
  sqlcode=[0],ename=[SCOTT ]
  sqlcode=[-1012],ename=[SCOTT ]
  sqlcode=[0],ename=[TURNER ]
  [oracle@huateng c]$ oerr ora 1012
  01012, 00000, "not logged on"
  // *Cause:
  // *Action:
  可以看到第一个SELECT 语句能正常运行,第二个SQL语句就报ORA-01012错误,重新登录后,第三个SELECT又可以正常运行。
  [oracle@huateng c]$

  SQL> select empno,ename from emp order by 1;
  EMPNO ENAME
  ---------- ------------------------------
  7369 SMITH
  7499 ALLEN
  7521 WARD
  7566 JONES
  7654 MARTIN
  7698 BLAKE
  7782 CLARK
  7788 SCOTT
  7839 KING
  7844 TURNER
  7876 ADAMS
  7900 JAMES
  7902 FORD
  7934 MILLER
  14 rows selected.
  SQL>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... steam上游戏的历史最低价格到哪儿查 1.IIS 5.0在下面哪个操作系统中已自动安装( )。 A. Windows 98 B. Windows2000 professional C. Windows steam历史交易报价在哪里查 利捷电动车 steam 游戏怎样查看其历史价格 能否用microsoft windows xp professional系统c语言编辑程序 steam怎么看历史交易报价 我的数控车床是928TF,为什么对刀总不在我设的零点上 利捷电动车质量怎么样? Pro*C的诡异现象 - 指向数组的指针 利捷电动车厂名是什么? 篮球架有多高? 数控广数928TE 系统 Proteus 7 Professional初学者关于c程序的问题 利捷牌利捷女皇电动车的基本信息 Windows 2000professional c:中多了Found.ooo文件 广数数控928系统,电动刀架改成排刀架这么操作,求指教 如何制作仓鼠水瓶? 利捷电动车09天剑款什么型号 pro*c跟C有什么区别 有谁能帮我找到电瓶车的车款和图片!所有的电动车的车款名称和图片! Pro*c 中怎么声明编译模式为ANSI steam市场现在价格是乱序吗? 江西南昌产&quot;利捷&quot;电动车,质量如何啊? 来份httpwatch professional破解版 proteus 7 professional 中示波器上的A,B,C,D个代表什么意思 南昌利捷电动车型号 三级网络,C语言中有个PRO,什么意思? 利捷电动车用的什么牌子的电池 利捷电动车质量如何? 江西省电动车上牌目录 上海电动车上牌目录 古筝码子的摆放问题 什么是抑郁症?? 抑郁症成仅次于癌症的人类第二大杀手,我们该如何战胜抑郁症? 抑郁症的危险仅次于癌症,它到底为什么这么严重? 重度抑郁症的死亡率有多大? 艺术家宋晓晨自杀,被曝长期受抑郁症影响,抑郁症的死亡率为何那么高? 又一著名音乐人因抑郁跳楼轻生,为什么这么多艺人深受抑郁症困扰? 抑郁症的致死率很高,人们为什么会患上抑郁症?