在 PLSQL 条件逻辑中使用子查询;错误 PLS-00405
Using a subquery within PLSQL conditional logic; error PLS-00405
我正在构建一个使用 PHP 从 Oracle10g 数据库服务器获取数据的应用程序。我的输入表单有一系列复选框,这些复选框通过数组提交到处理页面(代码过滤到相关元素):
<form>
<input type="checkbox" name="p_queue_type[]" id="p_queue_type_CR" value="CR" class="subject_to_all toggle_subcategory required" required="">
<input type="checkbox" name="p_queue_type[]" id="p_queue_type_HOLD" value="HOLD" class="subject_to_all toggle_subcategory required" required="">
</form>
处理页面调用一个 Oracle 过程,该过程使用自定义数据类型 "STRING_TABLE" (CREATE OR REPLACE TYPE STRING_TABLE AS TABLE OF VARCHAR (1000);
) 将 PHP 作为数组处理的复选框值转换为 table.
我的程序将这些复选框作为传入参数"p_queue_type"(代码过滤到相关元素):
PROCEDURE get_TLFQ_results (
p1 OUT SYS_REFCURSOR,
p_queue_type IN STRING_TABLE
)
IS
v_return_sql VARCHAR2(32767) := '';
BEGIN
IF ('HOLD' IN (SELECT COLUMN_VALUE AS queue_type FROM TABLE (p_queue_type))) THEN
--compile query string
END IF;
IF ('CR' IN (SELECT COLUMN_VALUE AS queue_type FROM TABLE (p_queue_type))) THEN
--compile query string
END IF;
-- Execute the query string and store the results in a cursor
OPEN p1 FOR v_return_sql;
END get_TLFQ_results;
当我尝试编译我的过程时,出现了这个 Oracle 错误:
[Error] PLS-00405 (4215: 23): PLS-00405: subquery not allowed in this
context
我做错了什么?如何在我的 PLSQL 条件逻辑中使用我的字符串 table?
您不能以这种方式在 PL/SQL IF 条件中使用 SELECT 语句。但是你可以这样做:
IF ('HOLD' member of p_queue_type) THEN
...
我正在构建一个使用 PHP 从 Oracle10g 数据库服务器获取数据的应用程序。我的输入表单有一系列复选框,这些复选框通过数组提交到处理页面(代码过滤到相关元素):
<form>
<input type="checkbox" name="p_queue_type[]" id="p_queue_type_CR" value="CR" class="subject_to_all toggle_subcategory required" required="">
<input type="checkbox" name="p_queue_type[]" id="p_queue_type_HOLD" value="HOLD" class="subject_to_all toggle_subcategory required" required="">
</form>
处理页面调用一个 Oracle 过程,该过程使用自定义数据类型 "STRING_TABLE" (CREATE OR REPLACE TYPE STRING_TABLE AS TABLE OF VARCHAR (1000);
) 将 PHP 作为数组处理的复选框值转换为 table.
我的程序将这些复选框作为传入参数"p_queue_type"(代码过滤到相关元素):
PROCEDURE get_TLFQ_results (
p1 OUT SYS_REFCURSOR,
p_queue_type IN STRING_TABLE
)
IS
v_return_sql VARCHAR2(32767) := '';
BEGIN
IF ('HOLD' IN (SELECT COLUMN_VALUE AS queue_type FROM TABLE (p_queue_type))) THEN
--compile query string
END IF;
IF ('CR' IN (SELECT COLUMN_VALUE AS queue_type FROM TABLE (p_queue_type))) THEN
--compile query string
END IF;
-- Execute the query string and store the results in a cursor
OPEN p1 FOR v_return_sql;
END get_TLFQ_results;
当我尝试编译我的过程时,出现了这个 Oracle 错误:
[Error] PLS-00405 (4215: 23): PLS-00405: subquery not allowed in this context
我做错了什么?如何在我的 PLSQL 条件逻辑中使用我的字符串 table?
您不能以这种方式在 PL/SQL IF 条件中使用 SELECT 语句。但是你可以这样做:
IF ('HOLD' member of p_queue_type) THEN
...