首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

一个简单的存储过程中碰到的有关问题,有图请进

2012-05-24 
一个简单的存储过程中碰到的问题,有图请进如图,小弟想把条件变量wherestr的值放入查询语句中去,作为查询条

一个简单的存储过程中碰到的问题,有图请进

如图,小弟想把条件变量wherestr的值放入查询语句中去,作为查询条件,
但是这样会出错,究竟要怎样放置才不会出错呢?求大家指点帮忙。谢谢!~~

[解决办法]
建议你去看看动态游标
[解决办法]
这个只是字符串的连接吧。直接用“+”什么的串起来应该也可以吧。一年多没碰这个了。也不是很记得了。不过游标与这个有关?怀疑中。
[解决办法]
要整条语句啊!select * from tablename where t.process_status!=3
[解决办法]
没必要,直接写死就好。

改为变量的话,就不好执行了。
[解决办法]
用“+”连接不行吗
[解决办法]

SQL code
CREATE OR REPLACE FUNCTION F_TEST RETURN VARCHAR2 AS  V_SQL          VARCHAR2(4000);  V_CONDITION    VARCHAR2(1000);  V_PARAM        VARCHAR2(2000);  CURSOR_NAME    NUMBER;  ROWS_PROCESSED NUMBER;  AREA_CODE      NUMBER;  RESULT         VARCHAR2(4000);BEGIN  V_SQL       := 'SELECT t.area_code FROM S_AREA_INFO t where 1=1 ';  V_CONDITION := ' and area_code like :a';  V_PARAM     := '52%';  CURSOR_NAME := DBMS_SQL.OPEN_CURSOR; --打开游标  DBMS_SQL.PARSE(CURSOR_NAME, V_SQL || V_CONDITION, DBMS_SQL.NATIVE); --解析动态SQL语句  DBMS_SQL.BIND_VARIABLE(CURSOR_NAME, ':a', V_PARAM); --绑定输入参数  DBMS_SQL.DEFINE_COLUMN(CURSOR_NAME, 1, AREA_CODE); --定义列  ROWS_PROCESSED := DBMS_SQL.EXECUTE(CURSOR_NAME); --执行动态SQL语句  LOOP    EXIT WHEN DBMS_SQL.FETCH_ROWS(CURSOR_NAME) <= 0; --fetch_rows在结果集中移动游标,如果未抵达末尾,返回1。      DBMS_SQL.COLUMN_VALUE(CURSOR_NAME, 1, AREA_CODE); --将当前行的查询结果写入上面定义的列中    RESULT := RESULT || AREA_CODE || ',';    END LOOP;  DBMS_SQL.CLOSE_CURSOR(CURSOR_NAME); --关闭游标  RETURN(RESULT);EXCEPTION  WHEN OTHERS THEN    IF DBMS_SQL.IS_OPEN(CURSOR_NAME) THEN      DBMS_SQL.CLOSE_CURSOR(CURSOR_NAME);    END IF;  RETURN 'error';END F_TEST;
[解决办法]
用动态sql,然后用||拼接起来
定义一个变量v_sql,然后v_sql:='一堆sql语句'||wherestr||'一堆sql语句'
拼完sql以后再写一行 execute immediate v_sql
[解决办法]
为什么不用open eng for呢?~ 也可以实现呀~
...
is
eng sys_refcursor;
...
begin
 result:='';
wherestr:='where t.process_status!3';
case 
when(adt_type=1) then
open eng for 'select t.prod_reg_no from t_exchange t '||wherestr;
loop
fetch eng into...;
exit when eng%notfound;
end loop;
end case;
...
[解决办法]
探讨

条件变量的值是视情况而变动的,所以我要这样设置啊

热点排行
Bad Request.