Oracle编程问题(5)
如果使用类似:
N_CID := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(N_CID, v_sqlcode, DBMS_SQL.V7);
DBMS_SQL.CLOSE_CURSOR(N_CID);
这样的方法来执行动态sql语句,那如何得到结果呢?
比如,我想知道select count(*) from tname的结果,
但使用 select count(*) into v_sum from tname这种写法似乎不太对.
有没有好的方法呢?
(我的目的,在SQL server可以这样来描述: if exists(select * from tname where col=v_col) ...)
问题点数:90、回复次数:7Top
1 楼alldog(芸芸众生)回复于 2002-02-04 10:43:16 得分 10
可以这样:
select * from tname where col=v_col;
if sql%RowCount >0 then........
这是oracle里得写法,sql server里应该差不多把
Top
2 楼flowerofwind(现实很残酷)回复于 2002-02-04 10:46:28 得分 5
DBMS_SQL.PARSE(N_CID, 'select count(*) into v_sum from tname', DBMS_SQL.V7);这样写没什么不可以的
如果你是delete,update ,Insert等语句可以这样
rows_processed INTEGER;
rows_processed:=DBMS_SQL.EXECUTE(N_CID);Top
3 楼green_girl(无名的裘德)回复于 2002-02-04 23:42:13 得分 0
去买一本sql的书籍,学一下Top
4 楼jhc(老猫)回复于 2002-02-05 10:37:53 得分 20
DBMS_SQL.PARSE(N_CID, 'select count(*) into v_sum from tname', DBMS_SQL.V7);
这样写法不对的。应该
DBMS_SQL.PARSE(N_CID, 'select count(*) v_sum from tname', DBMS_SQL.V7);
然后用dbms_sql.define_column定义列,用EXECUTE_AND_FETCH执行并提取记录
用VARIABLE_VALUE取得字段值
Top
5 楼rabbit(Mail_Man)回复于 2002-02-05 11:58:36 得分 10
为什么不使用 execute immediate 'sql' 语法,简单多了
也可以将查询结果放入变量中,好像是这样
execute immediate 'select count(*) from tab' into v_count;
你试一试吧,我在用WEBDB写HTML页面时,就是用这种方法,判断总的记录数的。
好像是这样吧 :)Top
6 楼xinpingf(白开心)回复于 2002-02-05 19:38:08 得分 45
给你个例子看看:
FUNCTION GET_DSQL_NUMBER(V_SQL IN VARCHAR2) RETURN NUMBER IS
N_CID INTEGER;
N_RET INTEGER;
N_NR NUMBER;
BEGIN
N_CID := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(N_CID, V_SQL, DBMS_SQL.V7);
DBMS_SQL.DEFINE_COLUMN(N_CID, 1, N_NR);
N_RET := DBMS_SQL.EXECUTE(N_CID);
IF DBMS_SQL.FETCH_ROWS (N_CID) >0 THEN
DBMS_SQL.COLUMN_VALUE(N_CID,1,N_NR);
END IF;
DBMS_SQL.CLOSE_CURSOR(N_CID);
RETURN N_NR;
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(N_CID);
RETURN NULL;
END;
Top
7 楼Dsoul(由MSSql弱智到Oracle弱智)回复于 2002-02-06 09:27:08 得分 0
大家都很热情的帮助我.谢谢.Top




