怎样才能把条件传到oracle存贮过程中去?

Tuxedo10 2003-09-26 01:12:24
jsp生成“and rq>sysdate”

存储过程中有一个
select * from test where 这里要加上jsp的and语句
怎么版?
或者
传一个表名

前台传test

存储过程 要select * from "test"
...全文
22 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
q_starry 2003-10-13
  • 打赏
  • 举报
回复
zwdjdxg_cur这么打开是不正确的,最好先定义一个类型
例如
CREATE OR REPLACE PACKAGE TYPES AS
TYPE ref_cursor IS REF CURSOR;
END;
在存储过程中:

zwdjdxg_cur types.ref_cursor;
.....
open zwdjdxg_cur for 'select * from emp';
Tuxedo10 2003-10-09
  • 打赏
  • 举报
回复
up
Tuxedo10 2003-10-09
  • 打赏
  • 举报
回复
create or replace procedure djdxgtodjd (Str varchar2) is
executesql varchar2(200) ;--内部存储sql变量
zdjbh zwdjdxg.djbh%type;--单据编号用于确定游标,出现错误写日志
v_ErrorMsg varchar2(200);--错误代码编码

Num number;--测试用,记录总数

cursor zwdjdxg_cur is
select a.djbh from zwdjdxg a where a.gxcs=0 || Str;--游标
begin
Num:=0;
executesql := 'select a.djbh from zwdjdxg a where 1=1 ' || Str;
execute immediate executesql;

open zwdjdxg_cur ;--打开游标
fetch zwdjdxg_cur into zdjbh;
while zwdjdxg_cur%found loop
begin
if Num<>0 then
fetch zwdjdxg_cur into zdjbh;
end if;
Num:=Num+1;
insert into zwdjd a select * from zwdjdxg b where b.djbh=zdjbh;
commit;
update zwdjd a set a.gxcs='0' where a.djbh=zdjbh;
delete from zwdjdxg b where b.djbh=zdjbh;
EXCEPTION
WHEN DUP_VAL_ON_INDEX OR NO_DATA_FOUND OR VALUE_ERROR THEN
--产生错误处理
-- Assign values to the log variables, using built-in
-- functions.
v_ErrorMsg := SQLERRM;
-- Insert the log message into log_table.
INSERT INTO log l (l.workerid,l.czrq,l.funcid,l.actor,l.operate)
VALUES ('8888',sysdate,'批量确认入网数据失败','单据编号为+'||zdjbh,v_ErrorMsg);
WHEN OTHERS THEN
NULL;
end;
end loop;
commit;
close zwdjdxg_cur;


end djdxgtodjd;
q_starry 2003-10-09
  • 打赏
  • 举报
回复
zwdjdxg_cur
定义成什么类型了?
Tuxedo10 2003-10-08
  • 打赏
  • 举报
回复
executesql:='select a.djbh from zwdjdxg a where 1=1 ' || Str;
open zwdjdxg_cur for executesql;
fetch zwdjdxg_cur into zdjbh;
提示--表达式类型错误
q_starry 2003-09-27
  • 打赏
  • 举报
回复
纠正一下错误
如果是select 语句就用open for
sql_text1 := ' and rq > sysdate';
sql_text := 'select * from test where '||sql_text1;
open c_Temp for sql_text;--c_Temp是一个油标变量
如果时其他语句 insert ,update,delete 用execute immediate

q_starry 2003-09-27
  • 打赏
  • 举报
回复
sql_text1 := ' and rq > sysdate';
sql_text := 'select * from test where '||sql_text1;
execute immediate sql_text;
Tuxedo10 2003-09-27
  • 打赏
  • 举报
回复
错了,执行的是
execute executesql;
Tuxedo10 2003-09-27
  • 打赏
  • 举报
回复
execute sql_text;
提示
Compilation errors for PROCEDURE UNICOM.DJDXGTODJD

Error: PLS-00103: 出现符号 "EXECUTESQL"在需要下列之一时:
:=.(@%;immediate
符号 ":=" 被替换为 "EXECUTESQL" 后继续。
Line: 10
Text: execute executesql;
hesi726 2003-09-26
  • 打赏
  • 举报
回复
不知道你想实现什么功能,如果只是单纯的 select ,那么不行!!或者使用动态 SQL (execute )来创建一个视图,然后从视图中取数据!!

如果是其他,可以试试使用 execute 直接执行!
例如 ,
sql_text := ' update xs_xsry set enabled=''N'' where 1=1 ';
sql_text := sql_text || condition; // condition 就是你传送过来的参数
execute sql_text;
zhui19760820 2003-09-26
  • 打赏
  • 举报
回复
@test
不对么?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧