动态SQL

本文介绍了在PL/SQL中如何使用动态SQL语句,并详细解释了四种不同的动态SQL执行方式,包括基本式、查询式、变量绑定式及海量式。此外,还探讨了早期绑定与晚期绑定的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.why——有些时候表明和列名在程序运行的时候才被告诉。

 

2.what

 

3.参考变量的绑定方式

    3.1:早起绑定——编译时检查表名和列名,如大部分DDL,

    3.2::晚期绑定——无法检查表名和列名。如动态SQL,truncate命令,

 

3.格式

   3.1:基本式

select *from emp;
declare
       vsql varchar(100);
       vtbl varchar(30);
begin 
      vtbl:='&请输入表名';
      vsql:='delete from'||vtbl;
      execute immediate vsql;--执行动态语句
      dbms_output.put_line(sql);
end;  
 declare
       salary number(6,2);
       sql_stat varchar2(100);
begin
     sql_stat:='update emp set sal=sal*(1+:percent/100)'
     ||'where empno=:eno returning sal into :salary';--这里的:salary不是占位符表示什么意思。
     execute immediate sql_stat using &增幅,&员工号 returning into salary;
     dbms_output.put_line('新工资'||salary);
end;

   3.2:查询式——execute immediate 查询sql into 变量

 

declare 
        vsql varchar(1000);
        v_empno emp.empno%type;
        v_ename emp.ename%type;
begin
     v_empno:='&请输入工号';
     vsql:='select ename from emp where empno='||v_empno;
     execute immediate vsql into v_ename;--执行动态语句
     dbms_output.put_line(v_ename);
end;

   3.3:变量绑定式——execute immediate sql  using 绑定变量

         *每个对PL/SQL变量的引用实际上都是绑定变量。

         *不能用绑定变量替换实际的数据库对象名 

declare 
        vsql varchar(1000);
        v_empno emp.empno%type;
        v_ename emp.ename%type;
begin
     v_empno:='&请输入工号';
     vsql:='select ename from emp where empno=:xx';
     execute immediate vsql into v_ename using v_empno;--执行动态语句
     dbms_output.put_line(v_ename);
end;

    3.4:海量式——ref corsor+open for

declare 
        type rc_type is ref cursor;
        my_rec rc_type;
        my_str varchar(30);
        v_field varchar(30);
begin
     v_field:='&字段';
     open my_rec for 'select'||v_field||'from'||&表名;
     fetch my_rec into my_str;
     while(my_rec%found)
     loop
         dbms_output.put_line(my_str);
         fetch my_rec into my_str;
     end loop;
     close my_rec;
end;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值