动态SQL与静态SQL
来源:互联网 发布:西方管理思想史 知乎 编辑:程序博客网 时间:2024/05/04 21:15
所谓静态SQL指在PL/SQL块中使用的SQL语句在编译时是明确的,执行的是确定对象。而动态SQL是指在PL/SQL块编译时SQL语句是不确定的,如根据用户输入的参数的不同而执行不同的操作。编译程序对动态语句部分不进行处理,只是在程序运行时动态地创建语句、对语句进行语法分析并执行该语句。
Oracle中动态SQL可以通过本地动态SQL来执行,也可以通过DBMS_SQL包来执行。下面就这两种情况分别进行说明:
一、本地动态SQL
本地动态SQL是使用EXECUTE IMMEDIATE语句来实现的。
1、本地动态SQL执行DDL语句:
需求:根据用户输入的表名及字段名等参数动态建表。
create or replace procedure proc_test
(
table_name in varchar2, --表名
field1 in varchar2, --字段名
datatype1 in varchar2, --字段类型
field2 in varchar2, --字段名
datatype2 in varchar2 --字段类型
) as
str_sql varchar2(500);
begin
str_sql:=’create table ’||table_name||’(’||field1||’ ’||datatype1||’,’||field2||’ ’||datatype2||’)’;
execute immediate str_sql; --动态执行DDL语句
exception
when others then
null;
end ;
以上是编译通过的存储过程代码。下面执行存储过程动态建表。
SQL> execute proc_test(’dinya_test’,’id’,’number(8) not null’,’name’,’varchar2(100)’); http://www.mscto.com
PL/SQL procedure successfully completed
SQL> desc dinya_test;
Name Type Nullable Default Comments
---- ------------- -------- ------- --------
ID NUMBER(8)
NAME VARCHAR2(100) Y
SQL>
到这里,就实现了我们的需求,使用本地动态SQL根据用户输入的表名及字段名、字段类型等参数来实现动态执行DDL语句。
2、本地动态SQL执行DML语句。
需求:将用户输入的值插入到上例中建好的dinya_test表中。
create or replace procedure proc_insert
(
id in number, --输入序号
name in varchar2 --输入姓名
) as
str_sql varchar2(500);
begin
str_sql:=’insert into dinya_test values(:1,:2)’;
execute immediate str_sql using id,name; --动态执行插入操作
exception
when others then
null;
end ;
执行存储过程,插入数据到测试表中。
- 动态SQL与静态SQL
- 动态SQL与静态SQL
- 动态SQL与静态SQL
- 动态sql与静态sql
- 静态SQLSQL与动态SQL
- 动态SQL与静态SQL区别
- 静态SQL与动态SQL的比较
- 静态sql与动态sql比较
- 静态sql与动态sql的区别
- 静态SQL和动态SQL
- 动态SQL与静态SQL-安全(第一部分)
- DB2静态/动态SQL语句与SQL注入攻击
- DB2静态SQL和动态SQL 的比较与实践
- DB2 静态 SQL 和动态 SQL 的比较与实践
- 静态SQL与动态SQL的比较 --权限
- sql语句 静态sql和动态sql
- 动态sql 和静态sql 上篇
- 动态sql 和静态sql 下篇
- 我觉得人从一出生似乎就进入了一场大的骗局之中,估计到老死才发现,自己其实是上了一个大当
- 【学习散记11之---文件和文件组体系结构】
- 线程锁
- 传Sun微系统高层将集体离职 或获高额遣散费
- 世界五百强面试题目及应答评点 (五)
- 动态SQL与静态SQL
- 粒子滤波 particles Filter
- 网站加速最佳实践 – 避免重定向
- QT 可用样式表示例
- NOKIA QT EXAMPLE
- 心
- Oracle基础试题(面试基本)
- Windows脱机文件的设置
- DH的出路之一