在Oracle存储过程中执行动态 SQL

admin
admin 这家伙很懒,还没有设置简介...

0 人点赞了该文章 · 283 浏览

何谓动态 SQL 和 DDL 语句呢?通常在存储过程中要操作的表名、字段名都必须是明确的,否则编译过程时就要报错,但如果这两者也用变量名来表示就是动态的。DDL 就是数据库对象定义的操作,如 CREATE TABLE/VIEW/INDEX/SYN/CLUSTER….,及这些对象的删除、修改操作等等。

比如在 Oracle 中有执行下面存储过程块的意图时,就要使用到 execute immediate 或是 DBMS_SQL 包了。当然下面的语句块是通不过的。

declare
col_name varchar2(30) := ’name’; –假定表user存在name字段
col_val varchar2(30);
begin
select col_name into col_val –按照惯常思维,可能就会这么写
from user where age between 18 and 25; –编译时会提示列名不存在的
drop table t2; –不能直接执行 DDL 语句,后面查询 t2 编译器就无能为力了
end;


insert into CRMACCESS.ucm_user (USER_NAME, PASSWORD, RANDOMCODE, INVITECODE, STATUS, CREATE_TIME, REMARK, SERVICENUMBER, PAT_TYPE, BILL_CYCLE)
values (’12′, ’04403cdc93eb35dbc2444f473e996af7′, ’384327′, ’1′, ’1′, to_date(’26-12-2013 13:50:25′, ‘dd-mm-yyyy hh24:mi:ss’), null, ’10000001′, 2, 1);

declare d INTEGER;
tel_num INTEGER;
begin
d:=1;
tel_num:=1000001;
while (d<=1000000)
loop
insert into CRMACCESS.ucm_user (USER_NAME, PASSWORD, RANDOMCODE, INVITECODE, STATUS, CREATE_TIME, REMARK, SERVICENUMBER, PAT_TYPE, BILL_CYCLE)
values(tel_num+d,’04403cdc93eb35dbc2444f473e996af7′,’384327′, ’1′, ’1′,sysdate,null,tel_num+d, 2, 1);
d:=d+1;
end loop;
end;

发布于 2014-11-15 10:31

免责声明:

本文由 admin 原创发布于 优势智云 ,著作权归作者所有。

登录一下,更多精彩内容等你发现,贡献精彩回答,参与评论互动

登录! 还没有账号?去注册

暂无评论

All Rights Reserved Powered BY WeCenter V4.0.3 © 2026 粤ICP备17102936号