oracle存储过程报错!

woshifenmi 2009-09-07 09:06:09
CREATE OR REPLACE PROCEDURE EA_MARKET_INTERFACE.P_GetCustProductInfo_Active(
RESULT OUT SYS_REFCURSOR, --结果集临时表名描述
CUST_CODE IN VARCHAR2 --客户代码
)IS
SQLS VARCHAR2(1000);
BEGIN
SQLS:='CREATE GLOBAL TEMPORARY TABLE VT_RESULT(
PRODUCT_CODE VARCHAR(20)
,PRODUCT_NAME VARCHAR(60)
,PRODUCT_KIND VARCHAR(50)
,PRODUCT_STATUS VARCHAR(100))';
EXECUTE IMMEDIATE SQLS;
COMMIT;//建立临时表

SQLS:='INSERT INTO VT_RESULT
SELECT COALESCE(A.PRODUCT_CODE,'')
,COALESCE(B.PRODUCT_NAME,'')
,COALESCE(C.PRODUCT_CLASS_NAME,'')
,COALESCE(B.PRODUCT_STATUS,'')
FROM CUST_PROD_MATCH A
INNER JOIN PRODUCT_DEF B ON A.PRODUCT_CODE=B.PRODUCT_CODE
INNER JOIN PRODUCT_CLASS C ON B.PRODUCT_CLASS_CODE=C.PRODUCT_CLASS_CODE
LEFT JOIN (SELECT PRODUCT_CODE,COUNT(1) AS RESOURCE_COUNT
FROM EA_MARKET.MS_PRODUCT_RESOURCE
GROUP BY PRODUCT_CODE
) D ON B.PRODUCT_CODE=D.PRODUCT_CODE
WHERE A.SRC_CUST_CODE='||CUST_CODE||'AND A.PRODUCT_CLASS_CODE=01';
EXECUTE IMMEDIATE SQLS;
COMMIT;//插入新的数据到临时表

--更新产品状态
UPDATE A
FROM VT_RESULT A,(
SELECT CODE_VAL,CODE_NOTE
FROM E_MMS.V_D_CODE_NOTE
WHERE GROUP_KEY='PRODUCT_STATUS'
AND INTF_ID=1) B
SET PRODUCT_STATUS=B.CODE_NOTE
WHERE A.PRODUCT_STATUS=B.CODE_VAL;
);//这里是更新产品状态,这段更新出错。

END;


各位大侠帮忙看看我的这段存储过程错在哪里?编译的时候update那里老是出错。



另:
还有一问:下面是teredata的存储过程中的一段,对于locking不是很懂,有哪位大侠把它翻成oracle的(关键是locking的语法 没找到关于orcale的写法)?感激不禁
LOCKING TABLE CUST_INDEX FOR EXCLUSIVE
SELECT CUST_CODE INTO :SRC_CUST_CODE
FROM CUST_INDEX A
WHERE A.RESERVE_TIME<=:RESERVE_TIME
AND A.PRODUCT_CLASS_CODE='01'
SAMPLE 1;
...全文
141 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshifenmi 2009-09-08
  • 打赏
  • 举报
回复
好的 老大你有什么联系方式吗?比如qq 以后有问题直接问你。多谢多谢
Finder_Way 2009-09-07
  • 打赏
  • 举报
回复
顶,学习了!
shiyiwan 2009-09-07
  • 打赏
  • 举报
回复
execute immediate 'lock table CUST_INDEX in exclusive mode';

对应locking
shiyiwan 2009-09-07
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE EA_MARKET_INTERFACE.P_GetCustProductInfo_Active( 
RESULT OUT SYS_REFCURSOR, --结果集临时表名描述
CUST_CODE IN VARCHAR2 --客户代码
)
IS
SQLS VARCHAR2(1000);
BEGIN
SQLS:='CREATE GLOBAL TEMPORARY TABLE VT_RESULT(
PRODUCT_CODE VARCHAR(20)
,PRODUCT_NAME VARCHAR(60)
,PRODUCT_KIND VARCHAR(50)
,PRODUCT_STATUS VARCHAR(100))';

EXECUTE IMMEDIATE SQLS;
COMMIT; --建立临时表

SQLS:='INSERT INTO VT_RESULT
SELECT COALESCE(A.PRODUCT_CODE,'')
,COALESCE(B.PRODUCT_NAME,'')
,COALESCE(C.PRODUCT_CLASS_NAME,'')
,COALESCE(B.PRODUCT_STATUS,'')
FROM CUST_PROD_MATCH A
INNER JOIN PRODUCT_DEF B ON A.PRODUCT_CODE=B.PRODUCT_CODE
INNER JOIN PRODUCT_CLASS C ON B.PRODUCT_CLASS_CODE=C.PRODUCT_CLASS_CODE
LEFT JOIN (SELECT PRODUCT_CODE,COUNT(1) AS RESOURCE_COUNT
FROM EA_MARKET.MS_PRODUCT_RESOURCE
GROUP BY PRODUCT_CODE
) D ON B.PRODUCT_CODE=D.PRODUCT_CODE
WHERE A.SRC_CUST_CODE='||CUST_CODE||'AND A.PRODUCT_CLASS_CODE=01';

EXECUTE IMMEDIATE SQLS;
COMMIT; --插入新的数据到临时表

--更新产品状态
UPDATE VT_RESULT A
SET PRODUCT_STATUS=(SELECT B.CODE_NOTE
FROM E_MMS.V_D_CODE_NOTE B
WHERE B.GROUP_KEY = 'PRODUCT_STATUS'
AND B.INTF_ID = 1
AND A.PRODUCT_STATUS = B.CODE_VAL);

END;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧