Oracle存储过程的参数问题(200分)

  • 主题发起人 主题发起人 youka_pcshs
  • 开始时间 开始时间
Y

youka_pcshs

Unregistered / Unconfirmed
GUEST, unregistred user!
存储过程中的查询中可能会有类似于这样的条件:<br>.... Where card_number in ('701', '702', '703')...<br>in 后面的字符串是不固定的,这个查询是在一个游标中的,然后根据结果进行处理。<br>现在这个字符串我想用参数传入存储过程中,请问该怎样写这个存储过程?
 
这个问题可能要用动态游标来处理,你可以参考下面的方法试试:<br>PROCEDURE DEMO(pcardnumber varchar) IS<br>&nbsp; v_cursor number;<br>&nbsp; v_sqlstr varchar(2000);<br>&nbsp; v_card &nbsp; varchar2(3);<br>&nbsp; v_result integer;<br>BEGIN<br>&nbsp; v_sqlstr := 'Select card_number From table Where card_number in (' || pcardnumber || ') ' ||<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'Order by card_number';<br><br>&nbsp; v_cursor := dbms_sql.open_cursor; <br>&nbsp; dbms_sql.parse(v_cursor, v_sqlstr, dbms_sql.native);<br>&nbsp; dbms_sql.define_column(v_cursor, 1, v_card, 3); <br>&nbsp; ...;<br>&nbsp; v_result := dbms_sql.execute(v_cursor);<br>&nbsp; v_result := dbms_sql.fetch_rows(v_cursor);<br>&nbsp; ...;<br>&nbsp; while True loop<br>&nbsp; &nbsp; dbms_sql.column_value(v_cursor, 1, v_card); --第一个卡号赋给 v_card<br>&nbsp; &nbsp; ...; --你自己的处理<br>&nbsp; end loop;<br>&nbsp; dbms_sql.close_cursor(v_cursor);<br>END DEMO;
 
接受答案了.
 
后退
顶部