好了,我又做了一个脚本,我需要在PL/SQL变量中存储一些数据。现在由于某种原因,我不能存储所说的数据。我尝试了没有INTO语句的查询本身,以证明查询是否是错误的,我得到了我期望的结果。但是一旦我到达匿名块,INTO不起作用,输出说没有找到数据。
这是剧本。
SET SERVEROUTPUT ON;
VAR TP1 VARCHAR2(30);
EXEC TP1 := &TIPO_PROPIEDAD_1;
DBMS_OUTPUT.PUT_LINE(:TP1);
DECLARE
V_CANT_1 PROPIEDAD.NRO_PROPIEDAD%TYPE;
V_TOTAL_1 PROPIEDAD.VALOR_ARRIENDO%TYPE;
V_DESC_1 TIPO_PROPIEDAD.DESC_TIPO_PROPIEDAD%TYPE;
BEGIN
-- CONSULTA 1
SELECT
COUNT(PR.NRO_PROPIEDAD),
SUM(PR.VALOR_ARRIENDO),
TP.DESC_TIPO_PROPIEDAD
INTO
V_CANT_1,
V_TOTAL_1,
V_DESC_1
FROM
PROPIEDAD PR INNER JOIN TIPO_PROPIEDAD TP
ON PR.ID_TIPO_PROPIEDAD = TP.ID_TIPO_PROPIEDAD
WHERE
TP.ID_TIPO_PROPIEDAD = :TP1
GROUP BY
TP.DESC_TIPO_PROPIEDAD;
DBMS_OUTPUT.PUT_LINE('RESUMEN DE : ' || V_DESC_1);
DBMS_OUTPUT.PUT_LINE('TOTAL DE PROPIEDADES : ' || V_CANT_1);
DBMS_OUTPUT.PUT_LINE('VALOR TOTAL ARRIENDO : ' || V_TOTAL_1);
END;
这里我将同时使用PROPIEDAD和TIPO_PROPIEDAD的数据类型,以备有人需要帮助。
PROPIEDAD:
Nombre ¿Nulo? Tipo
----------------------- -------- ------------
NRO_PROPIEDAD NOT NULL NUMBER(6)
VALOR_ARRIENDO NOT NULL NUMBER(7)
ID_TIPO_PROPIEDAD NOT NULL VARCHAR2(1)
TIPO_PROPIEPAD:
Nombre ¿Nulo? Tipo
------------------- -------- ------------
ID_TIPO_PROPIEDAD NOT NULL VARCHAR2(1)
DESC_TIPO_PROPIEDAD NOT NULL VARCHAR2(30)
我也会把错误写在这里。
Informe de error -
ORA-01403: No se ha encontrado ningún dato
ORA-06512: en línea 7
01403. 00000 - "no data found"
*Cause: No data was found from the objects.
*Action: There was no data from the objects which may be due to end of fetch.
此外,当我运行不带绑定变量的查询作为普通查询时,它确实会找到数据:
SELECT
COUNT(PR.NRO_PROPIEDAD),
SUM(PR.VALOR_ARRIENDO),
TP.DESC_TIPO_PROPIEDAD
FROM
PROPIEDAD PR INNER JOIN TIPO_PROPIEDAD TP
ON PR.ID_TIPO_PROPIEDAD = TP.ID_TIPO_PROPIEDAD
WHERE
TP.ID_TIPO_PROPIEDAD = 'A'
GROUP BY
TP.DESC_TIPO_PROPIEDAD;
结果:
COUNT(PR.NRO_PROPIEDAD) SUM(PR.VALOR_ARRIENDO) TP.DESC_TIPO_PROPIEDAD
7 3445000 Casa sin Amoblar
2条答案
按热度按时间7vhp5slm1#
根据您发布的内容,您错过或忽略了脚本将产生的早期错误;这个:
应该是
如果没有冒号,您对
TP1
的引用将被视为局部变量,而不是您声明的绑定变量,您将看到“PLS-00201:标识符'TP 1'必须声明为”“(在它提示您输入绑定值之后,这可能会使您认为该部分正在工作)。这意味着当您稍后在where
子句中使用实际绑定变量时,它仍然为null,因此没有匹配项。如果没有单引号,它将把替换值
A
视为另一个标识符而不是字符串,并且绑定变量仍然为null。您的
DBMS_OUTPUT.PUT_LINE(:TP1);
调试也将错误与“未知的命令”,因为您正在调用一个PL/SQL块外;你可以使用PRINT TP1
(带或不带冒号!)。vfhzx4xs2#
它不工作,因为没有匹配的行,所以抛出(不言自明的)异常
NO_DATA_FOUND
。如果你想输出一行,那么就在整个结果集中进行聚合:
它将始终返回一行,并应输出:
因为没有匹配的行,所以计数将是
0
,没有SUM
,也没有描述。或者,您可以处理异常:
fiddle