Oracle SQL-使用可变参数选择存储过程
我正在处理一个变量参数存储过程,它必须使用WHERE子句中传递给它的每个参数对表执行SELECT 基本上,我有N个帐号作为参数,我想返回一个表,其中包含为每个帐号选择三个字段的结果 这就是我到目前为止所做的:Oracle SQL-使用可变参数选择存储过程,sql,oracle,parameter-passing,Sql,Oracle,Parameter Passing,我正在处理一个变量参数存储过程,它必须使用WHERE子句中传递给它的每个参数对表执行SELECT 基本上,我有N个帐号作为参数,我想返回一个表,其中包含为每个帐号选择三个字段的结果 这就是我到目前为止所做的: function sp_get_minutes_expiration_default(retval IN OUT char, gc IN OUT GenericCursor, p_account_num IN CLIENT_ACCOUNTS.ACCOUNT_NUM%TYPE
function sp_get_minutes_expiration_default(retval IN OUT char, gc IN OUT GenericCursor,
p_account_num IN CLIENT_ACCOUNTS.ACCOUNT_NUM%TYPE) return number
is
r_cod integer := 0;
begin
open gc for select account_num, concept_def, minutes_expiration_def from CLIENT_ACCOUNTS
where p_account_num = account_num; -- MAYBE A FOR LOOP HERE?
return r_cod;
exception
-- EXCEPTION HANDLING
end sp_get_minutes_expiration_default;
我的暴力解决方案可能是循环一个帐号列表,选择并可能执行联合或附加到结果表中?如果将输入参数转换为表,则可以将其连接到客户端帐户
select account_num, concept_def, minutes_expiration_def
from CLIENT_ACCOUNTS ca, table(p_account_num) a
where a.account_num = ca.account_num
但我建议您将输出选择到另一个集合中,该集合是函数或过程的输出。我希望您不要使用引用游标
增编1
下面是一个更完整的示例:
create or replace type id_type_array as table of number;
/
declare
ti id_type_array := id_type_array();
n number;
begin
ti.extend();
ti(1) := 42;
select column_value into n from table(ti) where rownum = 1;
end;
/
在代码中,您需要使用框架的API来:
创建类型id\u type\u数组集合的实例
用数字列表填充集合
执行匿名PL/SQL块,在集合中绑定
但是您应该立即看到,即使许多经验丰富的Oracle开发人员都支持查询,您也不必将查询放入匿名PL/SQL块来执行它。只要绑定了正确的参数,就可以像执行任何其他查询一样执行查询:
select account_num, concept_def, minutes_expiration_def
from CLIENT_ACCOUNTS ca, table(:p_account_num) a
where a.column_value = ca.account_num
@jeff5times7在这个简短的示例中,p_account_num应该是什么类型的,一个SQL列表??我一直在读关于TABLE函数的书,但我真的不明白它需要什么参数。请你再扩展一点好吗?请参见附录1。