Oracle笔记:动态sql语句

01 动态sql执行ddl语句

在pl/sql程序开发中,可以使用DML语句和事务控制语句,但是还有很多语句(比如DDL语句)不能直接在pl/sql中执行。
这些语句可以使用动态的sql来实现。动态sql是指在pl/sql块编译sql语句是不确定的。

--动态sql执行ddl语句
drop procedure procedure5;
create or replace procedure procedure5(
	tablename in varchar2,
	column1 in varchar2,
	datatype1 in varchar2,
	column2 in varchar2,
	datatype2 in varchar2
)
as
    existscount number:=0;
	str_sql varchar2(500);
begin
    begin
        execute immediate 'drop table ' || tablename;
    exception when others then null;   
    end;    
    str_sql:='create table ' || tablename || 
    '(' || column1 || ' ' || datatype1 || ',' || column2 || ' ' || datatype2 || ')';
    execute immediate str_sql;--执行动态ddl语句    

--	execute immediate 'truncate table xxxxx'
--	execute immediate 'alter trigger xxxxx disable'
	
exception 
	when others then raise;
end;

测试如图:
在这里插入图片描述

02 动态sql执行dml语句

drop procedure procedure6;
create or replace procedure procedure6(
		table_in                IN     VARCHAR2,
		column1_in              IN     VARCHAR2,
		column1_data_in         IN     VARCHAR2,
		column2_in   			IN     VARCHAR2,
		column2_data_in   		IN     VARCHAR2
)
   IS

   BEGIN
      EXECUTE IMMEDIATE   'insert into '
                       || table_in || '(' || column1_in || ',' || column2_in || ')'
                       || 'values (:1,:2)'
         USING column1_data_in, column2_data_in;
		 COMMIT;
   EXCEPTION
      WHEN OTHERS
      THEN
         RAISE;
   END;
   
drop procedure procedure7;
create or replace procedure procedure7(
		table_in                  IN     VARCHAR2,
		column_in              IN     VARCHAR2,
		column_data_in         IN     VARCHAR2,
		column_where_in   IN     VARCHAR2,
		column_where_data_in   IN     VARCHAR2
)
   IS

   BEGIN
      EXECUTE IMMEDIATE   'Update '
                       || table_in
                       || ' set '
                       || column_in
                       || ' = :1 where '
                       || column_where_in
                       || ' = :2'
         USING column_data_in, column_where_data_in;
		 COMMIT;
   EXCEPTION
      WHEN OTHERS
      THEN
         RAISE;
   END;

测试如图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39827640/article/details/106544239
今日推荐