oracle - 在控制台中告诉我 SELECT 中缺少 INTO 的错误。PL/SQL
问题描述
此查询在 Oracle SQL 开发人员中,它是一个存储过程,可以接收一个值或数字或 RUC,并在 IF 中验证一个值是否为空,并在 SELECT 中进行搜索。
错误:
SELECT 语句中应包含 INTO 子句
询问:
CREATE OR replace PROCEDURE Otc_sp_rpt_ips(par_ruc IN VARCHAR2,
par_facturacion IN VARCHAR2)
IS
BEGIN
IF par_ruc IS NULL THEN
BEGIN
SELECT ca.legal_name "Legal Name/Name",
vw.documento_cliente,
ph.name "Phone Number",
vw.estado_abonado,
icc.iccid,
icc.imsi,
ip.name "IP Address",
pi.created_when "Created When"
--pi.object_id , pi.name, ca.type
FROM r_om_m2m_pi pi
join r_ri_private_ip_addr ip
ON pi.ip_address = ip.object_id
join r_ri_mobile_phone_number ph
ON pi.mobile_phone_number = ph.object_id
join r_cbm_billing_acct ba
ON pi.billing_account = ba.object_id
join r_cim_bsns_cust_acct ca
ON ba.parent_id = ca.object_id
join r_am_sim icc
ON pi.sim_card = icc.object_id
join otc_t_abonados_mov vw
ON ( vw.num_telefonico = ph.name
AND estado_abonado <> 'BAA'
AND vw.documento_cliente IN ( par_facturacion ) );
END;
ELSE
BEGIN
SELECT ca.legal_name AS "Legal Name/Name",
vw.documento_cliente,
ph.name AS "Phone Number",
vw.estado_abonado,
icc.iccid,
icc.imsi,
ip.name AS "IP Address",
pi.created_when AS "Created When"
--pi.object_id , pi.name, ca.type
FROM r_om_m2m_pi pi
join r_ri_private_ip_addr ip
ON pi.ip_address = ip.object_id
join r_ri_mobile_phone_number ph
ON pi.mobile_phone_number = ph.object_id
join r_cbm_billing_acct ba
ON pi.billing_account = ba.object_id
join r_cim_bsns_cust_acct ca
ON ba.parent_id = ca.object_id
join r_am_sim icc
ON pi.sim_card = icc.object_id
join otc_t_abonados_mov vw
ON ( vw.num_telefonico = ph.name
AND estado_abonado <> 'BAA'
AND vw.account_num IN ( par_ruc ) );
END;
END IF;
END otc_sp_rpt_ips;
---示例----
BEGIN OTC_SP_RPT('1790005739001',''); END;
---示例 2----
BEGIN OTC_SP_RPT('','2874695'); END;
解决方案
如果要从此过程返回选择查询的结果,则必须在代码中使用 sys_refcursor 作为 out 参数,因为没有它,Oracle 无法返回结果。所以你需要使用下面的查询 -
CREATE OR replace PROCEDURE Otc_sp_rpt_ips(par_ruc IN VARCHAR2,
par_facturacion IN VARCHAR2,
result OUT SYS_REFCURSOR)
IS
BEGIN
IF par_ruc IS NULL THEN
BEGIN
OPEN RESULT FOR
SELECT ca.legal_name "Legal Name/Name",
vw.documento_cliente,
ph.name "Phone Number",
vw.estado_abonado,
icc.iccid,
icc.imsi,
ip.name "IP Address",
pi.created_when "Created When"
--pi.object_id , pi.name, ca.type
FROM r_om_m2m_pi pi
join r_ri_private_ip_addr ip ON pi.ip_address = ip.object_id
join r_ri_mobile_phone_number ph ON pi.mobile_phone_number = ph.object_id
join r_cbm_billing_acct ba ON pi.billing_account = ba.object_id
join r_cim_bsns_cust_acct ca ON ba.parent_id = ca.object_id
join r_am_sim icc ON pi.sim_card = icc.object_id
join otc_t_abonados_mov vw
ON ( vw.num_telefonico = ph.name
AND estado_abonado <> 'BAA'
AND vw.documento_cliente IN ( par_facturacion ) );
END;
ELSE
BEGIN
OPEN RESULT FOR
SELECT ca.legal_name AS "Legal Name/Name",
vw.documento_cliente,
ph.name AS "Phone Number",
vw.estado_abonado,
icc.iccid,
icc.imsi,
ip.name AS "IP Address",
pi.created_when AS "Created When"
--pi.object_id , pi.name, ca.type
FROM r_om_m2m_pi pi
join r_ri_private_ip_addr ip
ON pi.ip_address = ip.object_id
join r_ri_mobile_phone_number ph
ON pi.mobile_phone_number = ph.object_id
join r_cbm_billing_acct ba
ON pi.billing_account = ba.object_id
join r_cim_bsns_cust_acct ca
ON ba.parent_id = ca.object_id
join r_am_sim icc
ON pi.sim_card = icc.object_id
join otc_t_abonados_mov vw
ON ( vw.num_telefonico = ph.name
AND estado_abonado <> 'BAA'
AND vw.account_num IN ( par_ruc ) );
END;
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error In Code');
RETURN;
END otc_sp_rpt_ips;
从 oracle 12C 开始,还有更多方法可以返回选择查询结果,但您仍然可以使用此方法。
推荐阅读
- angular - 分离组件的角度手动更改检测
- c - VS 在第二次重新分配后发疯
- azure - Docker 基于 TeamCity 云代理构建
- python - 这个错误是什么意思,我在哪里做错了?'targets/Y:0' TensorFlow:形状错误。
- java - java - 如何在java中的倒计时/计时器之后创建一个对话框窗口?
- kubernetes - 无法从机器内部卷曲入口:404
- javascript - 根据结果使用javascript更改p的背景颜色
- javascript - Cookie 通知脚本
- arrays - 如何使用 Kotlin 检查二维数组中是否存在值?
- c# - 使用 .net core 和 mongodb,有没有办法只更新我在 json 中传递的字段?