【发布时间】:2026-01-13 05:30:02
【问题描述】:
我正在使用 PL/SQL 编写一个包。
这是我的规格:
TYPE outrec IS RECORD(
tw_m_id NUMBER,
tw_m_dealer_id NUMBER,
tw_number NUMBER,
check_uid NUMBER);
TYPE outrecset IS TABLE OF outrec;
FUNCTION report
(
p_watermark IN NUMBER,
p_param IN NUMBER,
p_index IN NUMBER
) RETURN outrecset
PIPELINED;
这是我的身体:
FUNCTION func
(
p_watermark => p_watermark,
p_param => p_param,
p_index => p_index
)
RETURN outrecset
PIPELINED IS
temp outrec;
BEGIN
before_report(p_watermark => p_watermark,
p_param => p_param,
p_index => p_index);
FOR c_rec IN (SELECT tw_m_id,
tw_m_dealer_id,
tw_number,
package_name.somefunction(tw_number) AS check_uid
FROM table1
JOIN table2 rk ON id1 = rk.id2
WHERE 1 = 1
AND id1 = rk.id2
AND id1 = p_param)
LOOP
temp.tw_m_tw_rechnungskopf_id := c_rec.tw_m_tw_rechnungskopf_id;
temp.tw_m_haendler_id_rechnung := c_rec.tw_m_haendler_id_rechnung;
temp.check_uid := c_rec.check_uid;
PIPE ROW(temp);
END LOOP;
END;
我正在尝试从 package_name.somefunction(tw_number) AS check_uid 中获取价值。问题是 somefunction 返回 BOOLEAN 值。 当我将 check_uid 设置为 BOOLEAN 时,我得到 Error: PLS-00382: expression is of wrong type 因为当然 SQL 不支持 BOOLEAN。我试过了:
CASE
WHEN package_name.somefunction(tw_number) THEN true
else false
END as check_uid
在 SELECT 内然后我得到错误:PL/SQL: ORA-00920: 无效的关系运算符。
谁能告诉我如何做到这一点 PL/SQL 不是我最擅长的方面:(
- 编辑:我无法更改某些函数以返回示例 varchar2 它需要保持原样
【问题讨论】:
标签: sql oracle plsql boolean plsql-package