gpt4 book ai didi

oracle - 如何在oracle sql developer中选择存储过程输出参数作为表

转载 作者:行者123 更新时间:2023-12-05 00:54:30 25 4
gpt4 key购买 nike

我有一个程序

create or replace PROCEDURE proc
(
p1 IN varchar2,
p2 IN varchar2,
p3 OUT varchar2
) AS
BEGIN
p3:= p1 || ' ' || p2
END proc

我叫它

Declare
P3 varchar(50);
Begin
proc('foo', 'bar', P3)
END;

我可以使用打印出 P3 的值

Dbms_Output.Put_line('P3: ' || P3)

但我需要将结果作为我可以从中选择的表格。我能想到的最好方法是

Declare
P3 varchar(50);
Begin
proc('foo', 'bar', P3)
END;
SELECT &&P3 from dual;

但这给了我一个错误

Error report -
ORA-06550: line 5, column 12:
PL/SQL: ORA-00936: missing expression
ORA-06550: line 5, column 5:
PL/SQL: SQL statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilatiopn error.
*Action:

有没有办法选择参数的值作为列/行值?

我需要在单个 sql 查询中完成这一切,因为我需要通过链接服务器从另一台服务器执行它。

我无权在数据库上创建任何其他存储过程、函数或表。

最佳答案

对我来说,最直接的选择是创建一个函数 - 它应该返回一个值:

create or replace function proc (p1 IN varchar2, p2 IN varchar2)
return varchar2
AS
BEGIN
return p1 || ' ' || p2;
END proc;

然后你会称它为例如

select proc('a', 'b') from dual;

说您“无权创建...函数”- 好吧,如果您被授予创建 PROCEDURE 的权限,那么您也被授予创建 FUNCTION 的权限。这是相同的特权。


如果只能使用已经创建的过程,那么:

SQL> create or replace PROCEDURE proc
2 (
3 p1 IN varchar2,
4 p2 IN varchar2,
5 p3 OUT varchar2
6 ) AS
7 BEGIN
8 p3:= p1 || ' ' || p2;
9 END ;
10 /

Procedure created.

SQL> var result varchar2(20)
SQL>
SQL> exec proc('a', 'b', :result);

PL/SQL procedure successfully completed.

SQL> print :result

RESULT
--------------------------------
a b

SQL> select :result from dual;

:RESULT
--------------------------------
a b

SQL>

关于oracle - 如何在oracle sql developer中选择存储过程输出参数作为表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66136853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com