300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > oracle存储过程动态SQL中引号的使用

oracle存储过程动态SQL中引号的使用

时间:2022-11-04 20:56:13

相关推荐

oracle存储过程动态SQL中引号的使用

写存储过程时,引号是一个永远避不开的祸,如果只是单个引号的话很好用,比如向表中插入数据,

1.直接插(字符型加上引号就行)

INSERT INTO DEPT (DEPTNO,DNAME,LOC) VALUES (10,'ACCOUNTING','NEW YORK');

比如这个向DEPT表中插入数据,数据中是字符的加上引号就行。

2.写一个动态SQL插入数据,插入数据时直接执行动态SQL就行

V_SQL:='INSERT INTO DEPT (DEPTNO,DNAME,LOC) VALUES (10,''ACCOUNTING'',''NEW YORK'')';

EXECUTE IMMEDIATE V_SQL;--执行动态SQL

用一个动态SQL插入数据时,因为动态SQL需要单引号括起来,所以如果括号内的字符型数据还用一个单引号的话会报错,因为这时两个单引号表示一个单引号。

3.写一个动态SQL插入数据,插入的数据用一个变量来承载

V_SQL:='INSERT INTO ETL_LOG1 VALUES('''||V_DATA||''','''||V_SP_NAME||''','||V_STEP_NO||','''||V_STEP_DESC||''','''||V_SQL||''','''||O_STEP_RESULT||''',TO_CHAR(SYSDATE,''YYYY-MM-DD HH24:MI:SS''))';

EXECUTE IMMEDIATE V_SQL;--执行动态SQL

--其中变量的类型

V_DATA VARCHAR2(30):='1902';--输入日期

V_SQL VARCHAR2(2000);--用于运行/记录SQL语句

V_SP_NAME VARCHAR2(50):='SP_DEPT_ANALYSE' ;--表的名称

V_STEP_NO NUMBER :=0 ;--步骤编号

V_STEP_DESCVARCHAR2(200):='建表';--步骤描述

O_STEP_RESULT VARCHAR2(1):='1';--执行结果

我们可以发现,这插入的变量中,除了V_STEP_NO是数值型和TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS')是使用SYSDATE函数外,其余的都是字符型变量。这时候的引号就不好用了,因为它不仅是动态SQL,插入的数据还是用变量来承载的。

这时候字符型变量需要三个单引号括起来表示一个单引号;而数值型的话,它在动态SQL里如果直接用的话是不需要引号的,但要是用一个变量来承载数值的话,需要一个单引号括起来这个变量,表示这个变量里的数据是数值型的;而函数SYSDATE里的转换格式也需要两个单引号引起表示一个单引号。

总结:直接插入的话,字符型数据需要一个单引号引起表示它是字符串,数值型和日期函数不做处理;使用动态SQL插入的话,字符型使用两个单引号引起表示一个单引号,数字别的不做处理;而使用动态SQL插入,用变量承载数据的话,这时候字符型用三个单引号引起表示一个单引号,而数值型和时间函数的转换格式需要用一个单引号引起来,前者表明它是数值,后者两个单引号表示一个单引号。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。