比如一个简单的过程里面有如此SQL:
select * from table where id in (1,2,3,4)
如何在客户端传“1,2,3,4”这个参数到过程中,能让过程执行出上述效果???
因为传进来的是字符串,它会在外面包一层,看成一个字符串整体等待帮助!!!
select * from table where id in (1,2,3,4)
如何在客户端传“1,2,3,4”这个参数到过程中,能让过程执行出上述效果???
因为传进来的是字符串,它会在外面包一层,看成一个字符串整体等待帮助!!!
解决方案 »
- oracle10.2.0.1安装的问题
- 查询ip的问题
- 安装oracle8.17时出现" 写入文件:d:\oracle\ora81\jis\lib\full_orb.jar时出现错误,"
- 在Oracle的存储过程中如何执行杀掉某进程的命令??
- 急急急,oracle SQL语句优化 (高手请进)
- oracle9i 中恢复 oracle10g 中用exp导出的dmp文件出错
- 分组排序后,查询出指定条记录数,请教!
- 我想查询表中姓名重复纪录,如何用sql语句完成
- 一个简单的问题?
- DBA用户 在存储过程中使用动态SQL为什么会提示 insufficient privileges
- 存储过程中怎么用条件判断语句,急!!!!!
- [求助]关于开发中oracle时间方面的处理,谢谢
----------
1
2
3
4SQL> create or replace procedure tc(g_sql varchar2)
2 as
3 l_sql varchar2(1000);
4 l_cou int;
5 begin
6 l_sql:='select count(1) from ta where a in (';
7 l_sql:=l_sql||g_sql||')';
8 execute immediate l_sql into l_cou;
9 dbms_output.put_line(l_cou);
10 commit;
11 end;
12 /过程已创建。SQL> exec tc('1,2,3');
3PL/SQL 过程已成功完成。
其实我主要是想要返回一个数据集
oracle用的不太熟悉,我是想通过包传参数,返回数据集,具体代码如下
你能帮我看一下吗?或者给一个更好的方法!谢谢:
create or replace package body pkg_getCmdTotal as
procedure pr_getCmdTotal(AChkDate in varchar2,
ACmdID in varchar2,
AResultCursor out rc_CmdTotal
) is
begin
open AResultCursor for
select x.cmd_owner,
x.whouse_id,
x.Area_Whouse_Name,
x.prod_id,
x.Prod_Name,
x.Spec,
x.cmd_num,
y.num,
y.use_num
from (select a.cmd_owner,
c.parent_id whouse_id,
c.whouse_name Area_Whouse_Name,
b.prod_id,
d.Prod_Name,
d.Spec,
sum(cmd_num) cmd_num
from wms_cmd a, wms_cmd_item b, wms_whouse c, trd_Prod d
where a.cmd_id = b.cmd_id
and a.cmd_whouse = c.whouse_id
and b.Prod_ID = d.Prod_ID
and a.cmd_type in (1, 2, 3, 4)
and a.cmd_id in (1, 2)
and a.send_chk_date <= to_date(AChkDate,'yyyy-mm-dd')
and a.cmd_id in (ACmdID)
group by a.cmd_owner,
c.parent_id,
c.whouse_name,
b.prod_id,
d.Prod_Name,
d.Spec) x,
wms_inventory_total y
where x.cmd_owner = y.owner_id(+)
and x.whouse_id = y.whouse_id(+)
and x.cmd_owner = y.emissary_id(+)
and x.prod_id = y.prod_id(+);
end;
end;
procedure pr_getCmdTotal(AChkDate in varchar2,
ACmdID in varchar2,
AResultCursor out rc_CmdTotal
) is
vSql varchar2(2000);
begin
vSql :='
select x.cmd_owner,
x.whouse_id,
x.Area_Whouse_Name,
x.prod_id,
x.Prod_Name,
x.Spec,
x.cmd_num,
y.num,
y.use_num
from (select a.cmd_owner,
c.parent_id whouse_id,
c.whouse_name Area_Whouse_Name,
b.prod_id,
d.Prod_Name,
d.Spec,
sum(cmd_num) cmd_num
from wms_cmd a, wms_cmd_item b, wms_whouse c, trd_Prod d
where a.cmd_id = b.cmd_id
and a.cmd_whouse = c.whouse_id
and b.Prod_ID = d.Prod_ID
and a.cmd_type in (1, 2, 3, 4)
and a.cmd_id in (1, 2)
and a.send_chk_date <= to_date('''||AChkDate||''',''yyyy-mm-dd'')
and a.cmd_id in ('||ACmdID||')
group by a.cmd_owner,
c.parent_id,
c.whouse_name,
b.prod_id,
d.Prod_Name,
d.Spec) x,
wms_inventory_total y
where x.cmd_owner = y.owner_id(+)
and x.whouse_id = y.whouse_id(+)
and x.cmd_owner = y.emissary_id(+)
and x.prod_id = y.prod_id(+) ';
open aresultcursor for vsql;
end;
end;
感谢zmgowin!