ORACLE 11203,

同事咨询:下面的这段存储过程getNCInventory,在PL/SQL DEVELOPER开发工具的对该过程调用TEST功能来测试(只输入2个参数),但

放到SQLPLUS里就报错:

YQ@oeldzdz>declare

2    cur_calling pkg_nc_getdata.t_cursor;

3  begin

4    pkg_nc_getdata.getncinventory('1047V610000000000G7O','0001V6100000000R1V7X,0001V6100000000SYZUR,0001V6100000000SFB12,0001V6100000000SDYW3,0001V6100000000M6EST,0001V6100000000R9A3T',cur_calling);

5  end;

6  /

declare

*

ERROR at line 1:

ORA-00907: missing right parenthesis

ORA-06512: at "YQ.PKG_NC_GETDATA", line 645

ORA-06512: at line 4

Elapsed: 00:00:00.18

包头里定义了游标的数据类型。

CREATE OR REPLACE PACKAGE PKG_NC_GETDATA is

TYPE T_CURSOR IS REF CURSOR;

包体里的过程

procedure getNCInventory(v_pk_salestru  in varchar2, --销售组织主键

v_pk_invbasdoc in varchar2, --产品主键,如果有多个产品用逗号分开

results        out T_CURSOR) is

strSql        long(15000);

--strSql2        long(5000);

v_int         number := 1;

--v_pkinv       PKG_NC_GETDATA.pkinvbasdocArray;

begin

--DBMS_REFRESH.REFRESH('TYATP');

execute immediate 'truncate table TMP_PK_INVBASDOC_INFO';

loop

exit when regexp_substr(v_pk_invbasdoc,'[^,]+',1,v_int) is null;

insert into TMP_PK_INVBASDOC_INFO values (replace(regexp_substr(v_pk_invbasdoc,'[^,]+',1,v_int),'''','')) ;

v_int := v_int +1;

end loop;

commit;

strSql :='select

' ||v_pk_salestru|| ',

b.pk_calbody,

b.pk_invbasdoc,

nvl(ccl_num, 0) invnum, --现存量

/*nvl(b.ccl_num, 0) - nvl(a.nonsonum, 0) - nvl(a.nonreceiptnum, 0) +

nvl(nonponum, 0) + nvl(ntraninnum, 0) - nvl(ntranoutnum, 0) -

nvl(npickmnum, 0), --可用量*/

(nvl(nonponum,0)+nvl(ntraninnum,0)) waynum, --在途数量

(nvl(b.ccl_num, 0) - nvl(a.nonsonum, 0) - nvl(a.nonreceiptnum, 0) -

nvl(ntranoutnum, 0) - nvl(npickmnum, 0)) salenum --可销售数量

from (SELECT ic_atp.ccalbodyid,

bd_invbasdoc.pk_invbasdoc,

sum(nvl(nonponum, 0)) AS nonponum, --订单在途

sum(nvl(nonsonum, 0)) AS nonsonum, --销售订单承诺量

sum(nvl(nonreceiptnum, 0)) AS nonreceiptnum, --待发货单

sum(nvl(nrsvnum1, 0)) AS ntraninnum, --调拨在途,

sum(nvl(nrsvnum2, 0)) as ntranoutnum, --调拨单代转出量

sum(nvl(npickmnum, 0)) as npickmnum --备货计划量

from ic_atp

left join bd_stordoc on ic_atp.cwarehouseid =

bd_stordoc.pk_stordoc

INNER JOIN bd_invmandoc ON ic_atp.cinventoryid =

bd_invmandoc.pk_invmandoc

INNER JOIN bd_invbasdoc ON bd_invmandoc.pk_invbasdoc =

bd_invbasdoc.pk_invbasdoc

where isatpaffected = ''Y''

and ccalbodyid in

(select pk_calbody

from T_SALESTRU_CALBODY

where pk_salestru =  ' ||v_pk_salestru|| ')

and cwarehouseid in (select pk_stordoc

from T_CALBODY_STORDOC

where pk_calbody in

(select pk_calbody

from T_SALESTRU_CALBODY

where pk_salestru = ' ||v_pk_salestru|| ')

and isuse = ''0'' )

and bd_invbasdoc.pk_invbasdoc in (select PKINVBASDOC from TMP_PK_INVBASDOC_INFO )

group by ic_atp.ccalbodyid , bd_invbasdoc.pk_invbasdoc

) a,

(select stor.pk_calbody ,bas.pk_invbasdoc,

sum(icin2.num) ccl_num --现存量

from icin2

inner join bd_stordoc stor on stor.pk_stordoc =

icin2.cwarehouseid

inner join bd_invmandoc man on man.pk_invmandoc =

icin2.cinventoryid

inner join bd_invbasdoc bas on bas.pk_invbasdoc =

man.pk_invbasdoc

where stor.pk_calbody in

(select pk_calbody

from T_SALESTRU_CALBODY

where pk_salestru = ' ||v_pk_salestru|| ')

and icin2.cwarehouseid in

(select pk_stordoc

from T_CALBODY_STORDOC

where pk_calbody in

(select pk_calbody

from T_SALESTRU_CALBODY

where pk_salestru = ' ||v_pk_salestru|| ')

and isuse = ''0'')

and bas.pk_invbasdoc in (select PKINVBASDOC from TMP_PK_INVBASDOC_INFO )

group by stor.pk_calbody ,bas.pk_invbasdoc

) b

where a.ccalbodyid       (+) = b.pk_calbody

and a.pk_invbasdoc (+)= b.pk_invbasdoc  and nvl(ccl_num, 0) <> 0 ';

open results for strSql;

/* insert into tes_sql (testsql,username,createdate) values ((strSql),'liu-jh',sysdate);

commit;*/

end;

请教,在SQLPLUS里怎么调用返回游标值的过程?

oracle存储返回游标,如何接收存储过程返回的游标相关推荐

  1. mysql存储过程游标嵌套_MYSQL存储过程中使用游标嵌套的实例

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. delimiter $$ drop procedure if exists findErr ...

  2. C#获取存储过程返回值和输出参数值的方法

    //转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...

  3. java 存储过程 数组_Java调用存储过程返回数组

    Java调用存储过程: 结合SQL操作与存储过程 create procedure set_death_age(poet VARCHAR2, poet_age NUMBER) poet_id NUMB ...

  4. 获取存储过程返回值及代码中获取返回值

    获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...

  5. 获取存储过程返回值及代码中获取返回值(转)

    获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...

  6. Java调用存储过程返回数组

    Java调用存储过程: 结合SQL操作与存储过程 create procedure set_death_age(poet VARCHAR2, poet_age NUMBER) poet_id NUMB ...

  7. oracle存储过程rowcount用法,Oracle带输入、输出参数的存储过程回来受影响的行数SQL%ROWCOUNT...

    当前位置:我的异常网» SQL » Oracle带输入.输出参数的存储过程回来受影响的行数 Oracle带输入.输出参数的存储过程回来受影响的行数SQL%ROWCOUNT www.myexceptio ...

  8. Oracle存储过程返回游标实例详解

    复制代码 代码如下: CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT VARCHAR2, P_SUB VARCHAR2, P_SENDOR VARCHA ...

  9. 用.NET调用oracle的存储过程返回记录集

    最近做一个项目,为了提高数据库安全性,客户要求所有数据库操作都要放在存储过程.象一般的更新操作,返回一个值的,都比较容易实现.而要想返回记录集就比较麻烦,我在网上搜了一下,这方面的文章并不多.在此总结 ...

最新文章

  1. 什么样的技术将在后大流行的世界里兴起
  2. php获取函数里参数吗,php函数中获取参数信息方法(记录)
  3. 【杂谈】裸辞一年后,分享一下我的心态
  4. oracle11g 查看磁盘,oracle11g 磁盘
  5. python Logging日志记录模块详解
  6. 插入始终是1_C++入门篇(四十四),链表查询与结点插入
  7. DFS应用——遍历有向图+判断有向图是否有圈
  8. APNIC IP 库
  9. java执行sql列名无效_嵌套异常是java.sql.SQLException:无效的列名ORACLE
  10. 详解Nacos的高可用特性(转载)
  11. ASP.NET服务器控件查询
  12. linux安装命令自动运行y,centos7linux 安装jdk ,Tomcat加配置加自动启动。等命令
  13. 权限汇总 uses-permission
  14. OpenCV如何提取人眼区域的眼球位置
  15. validate.js的使用
  16. 药一点门诊收费管理系统
  17. C语言知识点总结2022
  18. android获取当前位置的GPS经纬度
  19. matlab imagesc jet,matlab imagesc
  20. php mysql stmt_PHP mysqli_stmt_init() 函数 | 菜鸟教程

热门文章

  1. Winform3、事件触发机制学习:事件的注册和定义和参数含义
  2. 如何进行特征选择 实践
  3. Windows下安装python3---pip-setuptools-matplotlib-tkinter
  4. 海尔微型计算机机箱如何拆解,想问海尔全自动洗衣机箱体怎么拆卸?
  5. 播放量超2000w,这些高能恰饭视频为什么能被B站用户“反复观看”?
  6. [STM32]PID恒温加热台(DIY回流焊)
  7. Lua:lua调用C++
  8. Mac如何找到文件的绝对路径
  9. Python小白的数学建模课-B6. 新冠疫情 SEIR 改进模型
  10. 到银联的调试过程,总结,记录