在PL/SQL编程当中,经常会遇到一些需要动态处理数据或表结构的问题,比如对一批表里的数据进行处理,或者批量创建表,索引,触发器等等,这个时候就可以通过DBMS_SQL包进行操作。你可能会有疑问,ORACLE不是提供了EXECUTE IMMEDIATE了嘛?干嘛还要DBMS_SQ ...
在PL/
SQL编程当中,经常会遇到一些需要动态处理数据或表结构的问题,比如对一批表里的数据进行处理,或者批量创建表,索引,触发器等等,这个时候就可以通过DBMS_SQL包进行操作。你可能会有疑问,ORACLE不是提供了
EXECUTE IMMEDIATE了嘛?干嘛还要DBMS_SQL包来处理?嘿嘿,不错,很多人都习惯用EXECUTE IMMEDIATE来动态处理此类需求。下面根据我的理解,解释一下二者的区别。SQL> create or replace procedure pro_test_dbms_sql(l_num in number,l_tabname in varchar2)过程已创建。SQL> exec pro_test_dbms_sql(0,'test');PL/SQL 过程已成功完成。SQL>
select table_name from user_tables where table_name='TEST';TABLE_NAMESQL> exec pro_test_dbms_sql(1,'test');PL/SQL 过程已成功完成。SQL> select count(1) from user_tables where table_name='TEST'; COUNT(1)SQL>
SQL> create or replace procedure pro_test_dbms_sql(l_num in number,l_tabname in varchar2)过程已创建。SQL> exec pro_test_dbms_sql(0,'test');PL/SQL 过程已成功完成。SQL> select table_name from user_tables where table_name='TEST';TABLE_NAMESQL> exec pro_test_dbms_sql(1,'test');PL/SQL 过程已成功完成。SQL> select count(1) from user_tables where table_name='TEST'; COUNT(1)SQL> 在这个例子里,我要用动态语句去更新TEMP表LJJE字段,得到JE的累积和。当然直接在LOOP里去执行UPDATE也可以得到,这里是为了熟悉和说明DBMS_SQL包的使用拿来举例。 ID JE LJJESQL> update temp set ljje=null;已更新4行。SQL> select * from temp; ID JE LJJESQL> 12 dbms_sql.parse(l_cur,l_sql,dbms_sql.native);过程已创建。SQL> exec pro_update_ljje;PL/SQL 过程已成功完成。SQL> select * from temp; ID JE LJJESQL> 3、 DML之绑定变量SQL> create table test(表已创建。SQL> insert into test已创建4行。SQL> commit;提交完成。 ID COUNTRY COMPANY NAME ADDRESS 2 china sap lab Myth XujiahuiSQL> SQL> create or replace procedure pro_update_address(l_country varchar2,l_address varchar2)过程已创建。SQL> SQL> exec pro_update_address('china','Pudong Area');PL/SQL 过程已成功完成。SQL> select * from test; ID COUNTRY COMPANY NAME ADDRESS 2 china sap lab Myth Pudong Are 3 china sap lab Lucy Pudong Are 4 china INXITE Kate Pudong Are ID COUNTRY COMPANY NAME ADDRESS小结:这里主要应用了几个常见的子过程,更多的子过程内容只是了解了下,详情请参考ORACLE安装目录下的DB
MSSQL.SQL。
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:全面学习DBMS包之DBMS_SQL
关键词:sql
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。