oracle存储过程sql拼接
1. java调用oracle存储过程 关于sql里面in函数参数的问题
调用存储过程是java 把组合起来的字符串传到数据库后台操作,如果你in ( pkStagesPersonArray),传到数据库后台还是 in ( pkStagesPersonArray) 而非你想要的 in('1330251','1336140' )所以你应该把pkStagesPersonArray 里面的内容转换成 '1330251','1336140' 再拼接起来
2. oracle存储过程中如何执行动态SQL语句 详细
有时需要在oracle
存储过程中执行动态SQL
语句
,例如表名是动态的,或字段是动态的,
或查询命令是动态的,可用下面的方法:
set
serveroutput
ondeclaren
number;sql_stmt
varchar2(50);
t
varchar2(20);beginexecute
immediate
'alter
session
set
nls_date_format=''YYYYMMDD''';
t
:=
't_'
||
sysdate;
sql_stmt
:=
'select
count(*)
from
'
||
t;
execute
immediate
sql_stmt
into
n;
dbms_output.put_line('The
number
of
rows
of
'
||
t
||
'
is
'
||
n);end;
如果动态SQL
语句
很长很复杂,则可用包装.
CREATE
OR
REPLACE
PACKAGE
test_pkgISTYPE
cur_typ
IS
REF
CURSOR;
PROCEDURE
test_proc
(v_table
VARCHAR2,t_cur
OUT
cur_typ);END;/
CREATE
OR
REPLACE
PACKAGE
BODY
test_pkgISPROCEDURE
test_proc
(v_table
VARCHAR2,t_cur
OUT
cur_typ)ISsqlstr
VARCHAR2(2000);BEGINsqlstr
:=
'SELECT
*
FROM
'||v_table;
OPEN
t_cur
FOR
sqlstr;END;END;/
在oracle
中批量导入,导出和删除表名以某些字符开头的表
spool
c:\a.sql
3. ORACLE存储过程的问题: 假设有A表,B表和C表,B表和C表是一样的字段,要把B表或者C表的数据插入到A表
授之以鱼不如授之以渔把,这类问题的调试都有一个标准方法,就是先把这句拼接的SQL字符串放入到一个定义的变量里,把这个变量返出来,或者DBMS.OUTPUT日志打出来,看看语句是否有问题,或者标点或者空格都有可能。具体你只要把打印出来的SQL语句单独执行下,根据错误提示就知道错误出在那了。然后在回去改拼接SQL语句的地方,如此往复,再复杂的SQL语句拼接也能够搞定。另外如果是通过游标循环生成的大SQL语句,建议存放在long类型变量中,因为一般的VACHAR2之类的字符类型会不够长,截断后面的语句,同样也会导致语句错误
4. Oracle [存储过程] 执行动态拼接SQL语句并返回结果
建议你用 instr函数,v_sql条件改为
where instr(p_jbm,t.jbm)>0试试吧。
5. oracle 存储过程 ,执行拼接sql,给制定参数赋值
execute immediate v_sql into rep_Val;
6. 将oracle写的存储过程改成sql server的存储过程
游标的语法两边差不多的,改一下数据类型Varchar2—》varchar,DATE->datetime等等,还有一些符号、时间类型转换、字符串拼接等函数就好了啊,一点一点调吧。
7. Oracle 怎么把存储过程传过来的参数拼接成
给你一个 传递参数的例子
SQL> CREATE OR REPLACE PROCEDURE HelloWorld2 (
2 p_user_name IN VARCHAR2,
3 p_out_val OUT VARCHAR2,
4 p_inout_val IN OUT VARCHAR2
5 ) AS
6 BEGIN
7 dbms_output.put_line('Hello ' || p_user_name || p_inout_val || '!');
8 p_out_val := 'A';
9 p_inout_val := 'B';
10 END HelloWorld2;
11 /
Procere created.
SQL> DECLARE
2 p_outval VARCHAR2(10);
3 p_inoutval VARCHAR2(10) := '~Hi~';
4 BEGIN
5 HelloWorld2('Edward', p_outval, p_inoutval);
6
7 dbms_output.put_line('p_outval=' || p_outval);
8 dbms_output.put_line('p_inoutval=' || p_inoutval);
9 END;
10 /
Hello Edward~Hi~!
p_outval=A
p_inoutval=B
PL/SQL procere successfully completed.
SQL>
8. ORACLE存储过程中拼接sql语句 后在EXCUTE的时候总是报错(详见下面)
对于这种动态SQL的错误,我的建议是把PS_SQL类似这样的字符变量通过dbms_output.putline('PS_SQL
IS:'||PS_SQL);先在命令行打印出来看看,再去执行打印出来的SQL就知道哪个
引号
有问题。
9. oracle 存储过程执行动态sql实例
oracle的动态sql是指在语句块使用execute immediate 执行sql语句,sql语句可以使用存储过程传的参数进行拼接,本文针对varchar2和number两种类型的参数类型,进行sql拼接并执行。
功能:输入日期区间,销售数量满足上限和下限的产品id
1.正常传值
输出结果
2.若果number类型的参数传空,会报ora-00936:缺失表达式,可以在存储过程中增加对参数null值的判断
oracle 动态拼接传入参数,varchar2类型可以使用'''|| IN_START_DTIME || ''' ,number类型可以使用'||IN_DOWN_LIMIT||' ; 拼接的过程需要注意校验参数的合法性,增加存储过程的容错性。临时表使用了会话级,存储过程执行完,可以通过查询存储过程获取结果。