【发布时间】:2020-04-09 16:10:05
【问题描述】:
我创建了一个 SP,但是在编译时出现错误
错误(9,1):PLS-00428:此 SELECT 语句中应有一个 INTO 子句
下面是SP
CREATE OR REPLACE PROCEDURE FIP_VALID_TBL_TRANSMEDIA
(
POUTMSG OUT VARCHAR2
)
AS
BEGIN
SELECT distinct TO_CHAR(sp.RJ_SPAN_ID) AS SPAN_ID, TO_CHAR(sp.RJ_MAINTENANCE_ZONE_CODE) AS MAINT_ZONE_CODE
from APP_FTTX.span@SAT sp
WHERE LENGTH(sp.RJ_SPAN_ID) = 21
AND (sp.RJ_SPAN_ID LIKE ('%SPN%') OR sp.RJ_SPAN_ID LIKE ('%SPQ%') OR sp.RJ_SPAN_ID LIKE ('%SPR%')
OR sp.RJ_SPAN_ID LIKE ('%SPS%'))
AND (sp.RJ_SPAN_ID LIKE ('%_BU') OR sp.RJ_SPAN_ID LIKE ('%_MP'))
AND sp.INVENTORY_STATUS_CODE = 'IPL'
AND sp.RJ_MAINTENANCE_ZONE_CODE = 'INMUNVMB01'
AND (sp.RJ_INTRACITY_LINK_ID NOT LIKE ('%\_9%') ESCAPE '\' OR
sp.RJ_INTRACITY_LINK_ID IS NULL)
MINUS
SELECT distinct TO_CHAR(sp.RJ_SPAN_ID) AS SPAN_ID, TO_CHAR(sp.RJ_MAINTENANCE_ZONE_CODE) AS
MAINT_ZONE_CODE
from APP_FTTX.span@SAT sp
INNER JOIN APP_FTTX.transmedia@SAT tm -- transmedia added
on sp.RJ_SPAN_ID = tm.RJ_SPAN_ID
WHERE length(sp.RJ_SPAN_ID) = length(tm.RJ_SPAN_ID)
and sp.RJ_MAINTENANCE_ZONE_CODE = tm.RJ_MAINTENANCE_ZONE_CODE
and sp.INVENTORY_STATUS_CODE = tm.INVENTORY_STATUS_CODE
AND LENGTH(sp.RJ_SPAN_ID) = 21
AND (sp.RJ_SPAN_ID LIKE ('%SPN%') OR sp.RJ_SPAN_ID LIKE ('%SPQ%')
OR sp.RJ_SPAN_ID LIKE ('%SPR%')
OR sp.RJ_SPAN_ID LIKE ('%SPS%'))
AND (sp.RJ_SPAN_ID LIKE ('%_BU') OR sp.RJ_SPAN_ID LIKE ('%_MP'))
AND sp.INVENTORY_STATUS_CODE = 'IPL'
AND sp.RJ_MAINTENANCE_ZONE_CODE = 'INMUNVMB01'
AND (sp.RJ_INTRACITY_LINK_ID NOT LIKE ('%\_9%') ESCAPE '\' OR
sp.RJ_INTRACITY_LINK_ID IS NULL);
NULL;
END FIP_VALID_TBL_TRANSMEDIA;
请指出这里有什么问题
更新
表格说明
Name Null Type
--------------- ---- --------------
SPAN_ID NVARCHAR2(100)
MAINT_ZONE_CODE NVARCHAR2(100)
UPDATED_DATE DATE
UPDATED_BY NVARCHAR2(100)
【问题讨论】:
-
ALTER PROCEDURE只能在您的过程已经存在时使用。作为一项规则,您应该使用CREATE OR REPLACE PROCEDURE,如果您的程序存在或不存在,它就会起作用。 -
已经有很多问题涉及到这一点;但是您认为错误消息可能意味着什么?您目前预计查询结果会发生什么变化?
-
@BobJarvis-ReinstateMonica:好的,明白了。相应地更改了
-
同意@AlexPoole。 FWIW,Steve Feuerstein 有一篇关于在 PLSQL 中使用 SELECT 语句和游标的好文章,blogs.oracle.com/oraclemagazine/working-with-cursors。这可能有助于理解如何在 PLSQL 中使用它们的细微差别。
-
在存储过程中运行 sql...您必须告诉 db 如何处理结果,这不像 sql server 可以使用 sp 运行 sql 并返回结果查询
标签: oracle join stored-procedures