sql – PLS-00428:在此SELECT语句中期望INTO子句
发布时间:2020-12-12 16:14:37 所属栏目:MsSql教程 来源:网络整理
导读:我想将Rownum存储为变量,而不是使用昂贵的Join. 我需要从Select语句中获取这个,因为Rownum将在各种环境中不同,因此它不能是代码中的字面字符串. 对于上下文,此查询在Oracle Siebel CRM架构上执行,并检索某些特定类型和属性的产品. 我尝试在Toad和Oracle SQL D
我想将Rownum存储为变量,而不是使用昂贵的Join.
我需要从Select语句中获取这个,因为Rownum将在各种环境中不同,因此它不能是代码中的字面字符串. 对于上下文,此查询在Oracle Siebel CRM架构上执行,并检索某些特定类型和属性的产品. 我尝试在Toad和Oracle SQL Developer中使用以下SQL代码,但是我收到以下错误:
这是代码 DECLARE PROD_ROW_ID varchar(10) := NULL; BEGIN SELECT ROW_ID INTO VIS_ROW_ID FROM SIEBEL.S_PROD_INT WHERE PART_NUM = 'S0146404'; BEGIN SELECT rtrim(VIS.SERIAL_NUM) || ',' || rtrim(PLANID.DESC_TEXT) || ',' || CASE WHEN PLANID.HIGH = 'TEST123' THEN CASE WHEN to_date(PROD.START_DATE) + 30 > sysdate THEN 'Y' ELSE 'N' END ELSE 'N' END || ',' || 'GB' || ',' || rtrim(to_char(PROD.START_DATE,'YYYY-MM-DD')) FROM SIEBEL.S_LST_OF_VAL PLANID INNER JOIN SIEBEL.S_PROD_INT PROD ON PROD.PART_NUM = PLANID.VAL INNER JOIN SIEBEL.S_ASSET NETFLIX ON PROD.PROD_ID = PROD.ROW_ID INNER JOIN SIEBEL.S_ASSET VIS ON VIS.PROM_INTEG_ID = PROD.PROM_INTEG_ID INNER JOIN SIEBEL.S_PROD_INT VISPROD ON VIS.PROD_ID = VISPROD.ROW_ID WHERE PLANID.TYPE = 'Test Plan' AND PLANID.ACTIVE_FLG = 'Y' AND VISPROD.PART_NUM = VIS_ROW_ID AND PROD.STATUS_CD = 'Active' AND VIS.SERIAL_NUM IS NOT NULL; END; END; / 解决方法在PLSQL块中,必须将select语句中的列分配给与SQL语句不同的变量.第二个开始的SQL语句没有INTO子句,导致错误. DECLARE PROD_ROW_ID VARCHAR (10) := NULL; VIS_ROW_ID NUMBER; DSC VARCHAR (512); BEGIN SELECT ROW_ID INTO VIS_ROW_ID FROM SIEBEL.S_PROD_INT WHERE PART_NUM = 'S0146404'; BEGIN SELECT RTRIM (VIS.SERIAL_NUM) || ',' || RTRIM (PLANID.DESC_TEXT) || ',' || CASE WHEN PLANID.HIGH = 'TEST123' THEN CASE WHEN TO_DATE (PROD.START_DATE) + 30 > SYSDATE THEN 'Y' ELSE 'N' END ELSE 'N' END || ',' || 'GB' || ',' || RTRIM (TO_CHAR (PROD.START_DATE,'YYYY-MM-DD')) INTO DSC FROM SIEBEL.S_LST_OF_VAL PLANID INNER JOIN SIEBEL.S_PROD_INT PROD ON PROD.PART_NUM = PLANID.VAL INNER JOIN SIEBEL.S_ASSET NETFLIX ON PROD.PROD_ID = PROD.ROW_ID INNER JOIN SIEBEL.S_ASSET VIS ON VIS.PROM_INTEG_ID = PROD.PROM_INTEG_ID INNER JOIN SIEBEL.S_PROD_INT VISPROD ON VIS.PROD_ID = VISPROD.ROW_ID WHERE PLANID.TYPE = 'Test Plan' AND PLANID.ACTIVE_FLG = 'Y' AND VISPROD.PART_NUM = VIS_ROW_ID AND PROD.STATUS_CD = 'Active' AND VIS.SERIAL_NUM IS NOT NULL; END; END; / 参考 http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/static.htm#LNPLS00601 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |