Oracle 如何在过程调用期间内联recordtype变量?
我试图将Oracle 如何在过程调用期间内联recordtype变量?,oracle,stored-procedures,plsql,parameter-passing,Oracle,Stored Procedures,Plsql,Parameter Passing,我试图将SELECT语句直接作为存储过程参数传递,但无法。如果我添加一个局部变量,并在其中选择,它就可以正常工作 以下是一个例子: DECLARE something MyTable%ROWTYPE; PROCEDURE Test(param IN MyTable%ROWTYPE) as BEGIN ... END; BEGIN SELECT SYS_GUID() as ID, 'X' as COLUMN1,
SELECT
语句直接作为存储过程参数传递,但无法。如果我添加一个局部变量,并在其中选择,它就可以正常工作
以下是一个例子:
DECLARE
something MyTable%ROWTYPE;
PROCEDURE Test(param IN MyTable%ROWTYPE) as
BEGIN
...
END;
BEGIN
SELECT
SYS_GUID() as ID,
'X' as COLUMN1,
'Y' as COLUMN2,
'Z' as COLUMN3
INTO something
FROM DUAL
WHERE rownum < 2;
Test(something);
END;
ORA-06550:第11行第11列:
PLS-00103:在预期以下情况时遇到符号“选择”:
(+case mod new不为空)
继续平均计数当前存在最大最小优先sql STDEV
对所有合并时间时间戳间隔执行求和方差
日期
管
- &-+;/at表示mod余数rem和
或具有相交减顺序起始并集的组,其中
连接| |多集
为什么它不接受我的内联select语句,但在将结果存储到变量中时可以工作?我需要做什么才能让内联语句按我的意愿工作?Oracle不能。(尽管在Postgres和其他数据库系统中可能会这样做。)
如果要传递SQL语句,使用SYS\u REFCURSOR
可能更容易,如下所示:
CREATE TABLE mytable(id varchar2(32), x varchar2(1), y varchar2(1), z varchar2(1));
DECLARE
v_cursor SYS_REFCURSOR;
something MyTable%ROWTYPE;
PROCEDURE Test(p_cursor sys_refcursor) as
BEGIN
FETCH p_cursor INTO something;
dbms_output.put_line(something.id);
END;
BEGIN
OPEN v_cursor for
SELECT
SYS_GUID() as ID,
'X' as COLUMN1,
'Y' as COLUMN2,
'Z' as COLUMN3
INTO something
FROM DUAL;
Test(v_cursor);
END;
/
Oracle不能。(尽管在Postgres和其他可能的数据库系统中也可以。)
如果要传递SQL语句,使用SYS\u REFCURSOR
可能更容易,如下所示:
CREATE TABLE mytable(id varchar2(32), x varchar2(1), y varchar2(1), z varchar2(1));
DECLARE
v_cursor SYS_REFCURSOR;
something MyTable%ROWTYPE;
PROCEDURE Test(p_cursor sys_refcursor) as
BEGIN
FETCH p_cursor INTO something;
dbms_output.put_line(something.id);
END;
BEGIN
OPEN v_cursor for
SELECT
SYS_GUID() as ID,
'X' as COLUMN1,
'Y' as COLUMN2,
'Z' as COLUMN3
INTO something
FROM DUAL;
Test(v_cursor);
END;
/
我假设你不再需要用这种方法在SELECT
语句中使用到某个东西中去。@julealgon这是正确的。虽然最终你需要用cursor变量将到某个东西中去。我假设你不再需要用这个应用程序在SELECT
语句中使用到某个东西中去roach.@julealgon这是正确的。尽管最终您需要使用cursor变量将转换为。