Sql 如何将此查询转换为过程?
我写了下面的select查询和it工作查找,并给出了输出Sql 如何将此查询转换为过程?,sql,database,oracle,stored-procedures,dbfunctions,Sql,Database,Oracle,Stored Procedures,Dbfunctions,我写了下面的select查询和it工作查找,并给出了输出 Select custname,contactno, enc_dec.decrypt(creditcardno,password) as creditcardno ,enc_dec.decrypt(income,password) as income from employees where custid=5; 现在我需要为这个名称写一个过程“retrieve_decrypt5”。 我这样写的过程,它遵守了,但调用它时并没
Select custname,contactno, enc_dec.decrypt(creditcardno,password) as
creditcardno ,enc_dec.decrypt(income,password) as
income from employees where custid=5;
现在我需要为这个名称写一个过程“retrieve_decrypt5”。
我这样写的过程,它遵守了,但调用它时并没有打印结果和给定的错误
CREATE OR REPLACE PROCEDURE retrieve_decrypt(
custid in NUMBER,
decrypt_value out sys_refcursor
)
IS
BEGIN
open decrypt_value for Select custname,contactno, enc_dec.decrypt(creditcardno,password) as
creditcardno ,enc_dec.decrypt(income,password) as
income from employees where custid=custid ;
COMMIT;
END;
/
我这样称呼它:SELECT retrieve_decrypt5 FROM DUAL。
需要一些专家帮助来解决这个问题。由于这个问题,我在很多时候都在挣扎 您创建了一个过程,而不是函数,因此无法从SQL语句调用它。参数也与定义不匹配 在使用SQL Developer时,测试它的一种简单方法是使用一个ref cursor bind变量,该变量在客户机中声明:
variable rc refcursor;
execute retrieve_decrypt(5, :rc);
print rc
然后将所有三行作为脚本运行
请注意,当用作过程参数时,rc前面的冒号。还要注意,variable、execute和print都是客户机命令。execute只是匿名PL/SQL块的简写
该过程更通用的用法是使用局部refcursor变量从PL/SQL块调用它,并在结果集上循环,对每一行执行一些操作。不过,你想用它们做什么还不清楚
也可以将过程转换为函数并返回refcursor,而不是将其作为out参数:
CREATE OR REPLACE FUNCTION retrieve_decrypt(
custid in NUMBER
)
RETURN sys_refcursor
IS
decrypt_value sys_refcursor;
BEGIN
open decrypt_value for Select custname,contactno, enc_dec.decrypt(creditcardno,password) as
creditcardno ,enc_dec.decrypt(income,password) as
income from employees where custid=custid ;
RETURN decrypt_value;
END;
/
未经测试,然后您可以称之为:
SELECT retrieve_decrypt(5) FROM DUAL;
但并非所有客户机都能整齐地显示结果。您还可以从PL/SQL块调用并迭代结果
但是,如果custid是唯一的,那么结果集将是单个值,因此可以使用标量变量和out参数。不过,目前还不清楚情况是否如此。也许您的意思是创建一个函数而不是一个过程。看看这个例子:Pole,我如何将它转换为函数?我尝试执行它,现在有任何错误。但不要打印任何输出。我已经展示了一个函数版本。您是否将过程版本作为脚本或单独的语句运行?相同的脚本。我试着执行你的第二个过程,它在第三行返回语句附近出现错误。语法错误哦,忘记了最重要的更改!固定的但仍然没有经过测试。