`
LynsaHuang
  • 浏览: 45883 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

关于动态SQL

阅读更多

http://tom7758.itpub.net/post/6024/49678

目前在ORACLE开发过程中,我所用到的动态SQL的一点心得。 我把它分为FORM级、TABLE级和pl/sql级。
1》FORM级 方法一:
FORMS_DDL:支持pl/sql和部分ddl 建表:Forms_DDL('create table temp(n NUMBER)'); 删表:Forms_DDL('drop table temp'); 删除记录:Forms_DDL('delete from temp'); 执行PL/SQL:Forms_ddl('begin '||过程名||'; End;');

**注意判断是否执行成功,通过FORM_SUCCESS or FORM_FAILURE来判断。


2》table级别 方法一:dbms_sql. 建表,删表,更新记录等操作,基本类似,我举一个建表的例子:
Declare
cursor_name integer;
ret INTEGER;
begin
cursor_name:=dbms_sql.open_cursor;
DBMS_SQL.PARSE(cursor_name, 'create table test_2(name varchar2(8))', DBMS_SQL.native);
ret := DBMS_SQL.EXECUTE(cursor_name);
DBMS_SQL.CLOSE_CURSOR(cursor_name);
END; 查询数据:
Declare
cursor_name integer;
ret integer;
V_1 varchar2(10);
V_2 number;
begin
cursor_name:=dbms_sql.open_cursor;
DBMS_SQL.PARSE(cursor_name, 'select ''test'' ,783426 from dual', DBMS_SQL.native);
DBMS_SQL.DEFINE_COLUMN(cursor_name, 1, V_1,10);
DBMS_SQL.DEFINE_COLUMN(cursor_name, 2, v_2);
ret := DBMS_SQL.EXECUTE(cursor_name);
IF DBMS_SQL.FETCH_ROWS(cursor_name)>0 THEN
DBMS_SQL.COLUMN_VALUE(cursor_name, 1, v_1);
DBMS_SQL.COLUMN_VALUE(cursor_name, 2, v_2);
dbms_output.put_line('第一个值:'||v_1);
dbms_output.put_line('第二个值:'||to_char(v_2));
end if;
Dbms_sql.close_cursor(cursor_name);
end ;

***最简单的判断执行是否成功,利用trap exception.
方法二:execute immediate
8版以上数据库,相当好用的一个东东,我常用。 建表,删表类似:
declare
begin
EXECUTE IMMEDIATE 'drop table temp_1';
EXECUTE IMMEDIATE 'create table temp_1(name varchar2(8))';
end ; 增加数据
declare
v_1 varchar2(8);
v_2 varchar2(10);
str varchar2(50);
begin
v_1:='测试人员';
v_2:='北京';
str := 'INSERT INTO test (name ,address) VALUES (:1, :2)';
EXECUTE IMMEDIATE str USING v_1, v_2;
commit;
end;
查询数据:
declare
str varchar2(500);
c_1 varchar2(10);
r_1 test%rowtype;
begin
c_1:='测试人员';
str:='select * from test where name=:c WHERE ROWNUM=1';
execute immediate str into r_1 using c_1;
DBMS_OUTPUT.PUT_LINE(R_1.NAME||R_1.ADDRESS);
end ;


3》pl/sql级别 我仅仅用于查询。 例:
DECLARE
TYPE mycursor IS REF CURSOR;
cursor_1 mycursor;
r_1 test%ROWTYPE;
str VARCHAR2(100);
BEGIN
str := 'select * from test';
OPEN cursor_1 FOR str;
LOOP
FETCH cursor_1 INTO r_1;
EXIT WHEN emp_cv%NOTFOUND;
dbms_output.put_line(r_1.name);
END LOOP;
CLOSE cursor_1;
END;
分享到:
评论

相关推荐

    mybatis 框架中关于动态sql的内容讲解及笔记.txt

    mybatis 框架中关于动态sql的内容讲解及笔记.txt

    oracle关于动态SQL的使用

    在PL/SQL开发过程中,使用SQL,PL/SQL可以实现大部份的需求,但是在某些特殊的情况下,在PL/SQL中使用标准的SQL语句或DML语句不能实现自己...这就需要使用动态SQL来实现。本文通过几个实例来详细的讲解动态SQL的使用。

    Gbase8s动态sql的介绍

    Gbase8s 动态 SQL 介绍 Gbase8s 动态 SQL 介绍 在 Gbase8s 中,动态 SQL 是一种特殊的 SQL 语句形式,它可以在执行时动态改变 SQL 语句的内容,不需要预先知道每个 SQL 语句的确切内容。与静态 SQL 不同,静态 SQL...

    SQLServer动态SQL语句的用法

    SQL Server 动态 SQL 语句的用法 SQL Server 中的动态 SQL 语句是一种灵活的查询方式,它可以根据不同的情况生成不同的 SQL 语句。动态 SQL 语句可以用来实现复杂的业务逻辑,提高查询效率和灵活性。 普通 SQL ...

    hibernate实现动态SQL查询

    hibernate实现动态SQL查询,通过XML配置SQL,FREEMARKER 解析,生成要执行的SQL

    kettel循环执行动态sql

    kettel循环执行动态sql,

    PB动态SQL语句

    完整讲述PB中关于动态SQL的使用。相信会让你的PB大大精进。。

    mybatis 动态sql及参数传递

    在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,大大降低了拼接SQL导致的错误。 动态标签 if标签 if标签通常用那个胡where语句,update语句,insert...

    mybatis动态sql.zip

    mybatis动态sql,动态sql解析引擎,类似mybatis动态sql的功能。 mybatis动态sql,动态sql解析引擎,类似mybatis动态sql的功能。mybatis动态sql,动态sql解析引擎,类似mybatis动态sql的功能。mybatis动态sql,...

    动态SQL语句基本语法。动态SQL语句基本语法

    动态sql语句基本语法 1 :普通SQL语句可以用Exec执行 例: Select * from tableName Exec('select * from tableName') Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,...

    静态、动态sql及各种游标

    静态、动态sql及各种游标,适合初学者学习

    mybatis之动态SQL

    mybatis之动态SQL

    动态SQL 并且把返回的值赋给变量

    动态SQL 并且把返回的值赋给变量,sp_executesql,动态sql语句基本语法

    mybatis动态sqlmybatis动态sqlmybatis动态sql

    mybatis动态sql MyBatis是一种开源的持久层框架,它为Java程序员提供了一种简化数据库访问的方式。其中,动态SQL是MyBatis的一个重要特性,它允许用户根据不同的条件拼接SQL语句,从而实现更加灵活和可扩展的数据库...

    PLSQL开发中动态SQL的使用方法.doc

    在 PL/SQL 开发过程中,使用 SQL,PL/SQL 可以实现大部分的需求,但是在某些特殊的情况下,在 PL/SQL 中使用标准的 SQL 语句或 DML 语句不能实现自己的需求,比如需要动态建表或某个不确定的操作需要动态执行。...

    DB2游标及动态SQL

    DB2游标及动态SQL,异常处理,sqlcode,sqlstate

    springboot_mybatis_整合(静态mapper和动态sql)

    这个版本包括log4j2 sql Mapper 和 动态sql 具体参见: http://blog.csdn.net/tianhongqiang/article/details/57082946(框架整合) http://blog.csdn.net/tianhongqiang/article/details/60975953(sql mapper) ...

    动态SQL语句基本语法

    学习SQL应知道的动态SQL语句基本语法 学习SQL应知道的动态SQL语句基本语法 学习SQL应知道的动态SQL语句基本语法 学习SQL应知道的动态SQL语句基本语法

    动态SQL与绑定变量

    动态SQL与绑定变量 动态SQL与绑定变量

    学习SQL 应知道的动态SQL 语句基本语法

    学习SQL 应知道的动态SQL 语句基本语法学习SQL 应知道的动态SQL 语句基本语法

Global site tag (gtag.js) - Google Analytics