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
在PL/SQL开发过程中,使用SQL,PL/SQL可以实现大部份的需求,但是在某些特殊的情况下,在PL/SQL中使用标准的SQL语句或DML语句不能实现自己...这就需要使用动态SQL来实现。本文通过几个实例来详细的讲解动态SQL的使用。
hibernate实现动态SQL查询,通过XML配置SQL,FREEMARKER 解析,生成要执行的SQL
kettel循环执行动态sql,
完整讲述PB中关于动态SQL的使用。相信会让你的PB大大精进。。
Gbase8s动态sql的介绍
在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,大大降低了拼接SQL导致的错误。 动态标签 if标签 if标签通常用那个胡where语句,update语句,insert...
mybatis动态sql,动态sql解析引擎,类似mybatis动态sql的功能。 mybatis动态sql,动态sql解析引擎,类似mybatis动态sql的功能。mybatis动态sql,动态sql解析引擎,类似mybatis动态sql的功能。mybatis动态sql,...
动态sql语句基本语法 1 :普通SQL语句可以用Exec执行 例: Select * from tableName Exec('select * from tableName') Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,...
静态、动态sql及各种游标,适合初学者学习
mybatis之动态SQL
动态SQL 并且把返回的值赋给变量,sp_executesql,动态sql语句基本语法
mybatis动态sql MyBatis是一种开源的持久层框架,它为Java程序员提供了一种简化数据库访问的方式。其中,动态SQL是MyBatis的一个重要特性,它允许用户根据不同的条件拼接SQL语句,从而实现更加灵活和可扩展的数据库...
SQLServer动态SQL语句的用法
DB2游标及动态SQL,异常处理,sqlcode,sqlstate
这个版本包括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 语句基本语法