【发布时间】:2017-11-02 10:30:04
【问题描述】:
我有以下存储过程:
Procedure MyProc
(
Output1 OUT VARCHAR2
Output2 OUT VARCHAR2
Output3 OUT VARCHAR2
)
IS
BEGIN
SELECT mt.value
from myTable mt
join all_arguments aa on aa.argument_name=mt.key;
END myProc;
如何将 mt.Value 放入相应的参数(即Output1、output2 或 output3?)
编辑:需要更多细节
所以,我有我的输出参数Output1、Output2 和Output3,
我的表包含以下内容>
CREATE TABLE myTable ( key, value ) AS
SELECT 'Output1', 'Result1' FROM DUAL UNION ALL
SELECT 'Output2', 'Result2' FROM DUAL UNION ALL
SELECT 'Output3', 'Result3' FROM DUAL;
所以,最后,我想在Output1 中返回Result1,在Output2 中返回Result2,在Output3 中返回Result3
目的是有一个非常灵活的过程,因为返回值的数量很大,可以更改,我希望至少添加行。
现在,当我添加一个输出时,我需要在我的输出参数列表中添加一个输出(这个是无法避免的),但我还需要在我的列表中添加一个条件,比如说
IF mt.key='Output4' THEN mt.Value Into Output4
我想避免最后的声明。
【问题讨论】:
-
你想通过这个实现什么?请提供minimal reproducible example,包括
myTable的DDL 语句和一些示例数据的DML 语句,以说明您的问题并说明您的预期输出。 -
你想用这个实现什么?定义一个集合 (
CREATE TYPE StringList IS TABLE OF VARCHAR2(30);) 然后BULK COLLECT INTO该集合并返回一个包含可变数量的项目而不是可变数量的 out 参数的集合是否合适?
标签: sql oracle stored-procedures reflection plsql