when I run the query I get this error: ORA-06550
when I run the query I get this error: ORA-06550
我在 运行 这个查询时遇到这个错误。
PLS-00428: an INTO clause is expected in this SELECT statement
查询:
DECLARE
v_flag_tipo_factu varchar2(20);
BEGIN
SELECT valor_param INTO v_flag_tipo_factu FROM t_param WHERE cod_param =
'TIPOFAC';
if v_flag_tipo_factu = 'FN' THEN
SELECT
substr('00' || to_char(cta.cod_correo), -2) ||
substr('000000000' || to_char(cta.num_cta_cte), -9) ||
substr('000000000' || to_char(max(distinct fac.num_fac)),- 9)
FROM
t_acc_const cta,
t_fac fac
WHERE
cta.num_cta_cte = fac.num_cta_cte AND
fac.num_factura < 900000000
GROUP BY cta.cod_correo, cta.num_cta_cte;
end if;
END;
我预计会有 240,000 个这样的结果:
13000291956000774037
06000167340000223372
13000089241000246480
13000057283000105163
06001632092003471840
13000093581000257191
12000252313001947873
06000120216000066999
06000309294001948770
13000192054000285006
如您所知,SELECT
(IF
中的那个)缺少 then INTO
子句。您必须再声明一个局部变量并使用它:
DECLARE
v_flag_tipo_factu varchar2(20);
--
v_result varchar2(50); --> this
BEGIN
SELECT valor_param INTO v_flag_tipo_factu FROM t_param WHERE cod_param =
'TIPOFAC';
if v_flag_tipo_factu = 'FN' THEN
SELECT
substr('00' || to_char(cta.cod_correo), -2) ||
substr('000000000' || to_char(cta.num_cta_cte), -9) ||
substr('000000000' || to_char(max(distinct fac.num_fac)),- 9)
INTO v_result --> this
FROM
...
如果 select
returns 单个值,它会起作用;否则,查询将引发
no_data_found
如果没有满足条件的行
too_many_rows
。如何处理?这取决于你想做什么...
如果您不喜欢 PL/SQL 规则,其中查询必须存储在每个步骤的变量中,您可以使用这样的查询,它应该 return 相同
with v as (
SELECT valor_param FROM t_param WHERE cod_param = 'TIPOFAC'
)
SELECT
substr('00' || to_char(cta.cod_correo), -2) ||
substr('000000000' || to_char(cta.num_cta_cte), -9) ||
substr('000000000' || to_char(max(distinct fac.num_fac)),- 9)
FROM
t_acc_const cta,
t_fac fac
WHERE
cta.num_cta_cte = fac.num_cta_cte AND
fac.num_factura < 900000000 AND
EXISTS (select 1 from v where valor_param = 'FN')
GROUP BY cta.cod_correo, cta.num_cta_cte;
我在 运行 这个查询时遇到这个错误。
PLS-00428: an INTO clause is expected in this SELECT statement
查询:
DECLARE
v_flag_tipo_factu varchar2(20);
BEGIN
SELECT valor_param INTO v_flag_tipo_factu FROM t_param WHERE cod_param =
'TIPOFAC';
if v_flag_tipo_factu = 'FN' THEN
SELECT
substr('00' || to_char(cta.cod_correo), -2) ||
substr('000000000' || to_char(cta.num_cta_cte), -9) ||
substr('000000000' || to_char(max(distinct fac.num_fac)),- 9)
FROM
t_acc_const cta,
t_fac fac
WHERE
cta.num_cta_cte = fac.num_cta_cte AND
fac.num_factura < 900000000
GROUP BY cta.cod_correo, cta.num_cta_cte;
end if;
END;
我预计会有 240,000 个这样的结果:
13000291956000774037
06000167340000223372
13000089241000246480
13000057283000105163
06001632092003471840
13000093581000257191
12000252313001947873
06000120216000066999
06000309294001948770
13000192054000285006
如您所知,SELECT
(IF
中的那个)缺少 then INTO
子句。您必须再声明一个局部变量并使用它:
DECLARE
v_flag_tipo_factu varchar2(20);
--
v_result varchar2(50); --> this
BEGIN
SELECT valor_param INTO v_flag_tipo_factu FROM t_param WHERE cod_param =
'TIPOFAC';
if v_flag_tipo_factu = 'FN' THEN
SELECT
substr('00' || to_char(cta.cod_correo), -2) ||
substr('000000000' || to_char(cta.num_cta_cte), -9) ||
substr('000000000' || to_char(max(distinct fac.num_fac)),- 9)
INTO v_result --> this
FROM
...
如果 select
returns 单个值,它会起作用;否则,查询将引发
no_data_found
如果没有满足条件的行too_many_rows
。如何处理?这取决于你想做什么...
如果您不喜欢 PL/SQL 规则,其中查询必须存储在每个步骤的变量中,您可以使用这样的查询,它应该 return 相同
with v as (
SELECT valor_param FROM t_param WHERE cod_param = 'TIPOFAC'
)
SELECT
substr('00' || to_char(cta.cod_correo), -2) ||
substr('000000000' || to_char(cta.num_cta_cte), -9) ||
substr('000000000' || to_char(max(distinct fac.num_fac)),- 9)
FROM
t_acc_const cta,
t_fac fac
WHERE
cta.num_cta_cte = fac.num_cta_cte AND
fac.num_factura < 900000000 AND
EXISTS (select 1 from v where valor_param = 'FN')
GROUP BY cta.cod_correo, cta.num_cta_cte;