Oracle:从存储过程重命名列标题
Posted
技术标签:
【中文标题】Oracle:从存储过程重命名列标题【英文标题】:Oracle: Renaming column headers from stored procedure 【发布时间】:2014-04-16 00:04:57 【问题描述】:这应该是微不足道的,但出于某种原因,我正在摸不着头脑。
我只想为从存储过程返回的行集分配一个列名。不幸的是,在 Oracle SQL Developer 中创建的存储过程中使用 SQLPlus 中的语法会产生编译器错误。
来自 MSSQL: SELECT 'foobar' as 'Column Header'
来自 SQLPlus: SELECT 'foobar' as "Column Header" from dual;
Oracle SQL Developer Sproc:
CREATE OR REPLACE PROCEDURE sproc01 AS
BEGIN
SELECT 'foobar ' as "Column Header" from dual;
END sproc01;
Error(3,3): PLS-00428: an INTO clause is expected in this SELECT statement
这也会失败并出现同样的错误 -
CREATE OR REPLACE PROCEDURE PROCEDURE1 AS
MyValue NVARCHAR2(40) := 'foobar ';
BEGIN
select MyValue as "My Value" from dual;
END PROCEDURE1;
有什么建议吗?
【问题讨论】:
【参考方案1】:在 PL/SQL 过程中,您必须在某处分配结果。例如,它可能是可变的。这就是为什么它抱怨缺少INTO
子句。它与列名无关。
【讨论】:
【参考方案2】:由于您来自 SQL Server 背景,需要意识到的重要事项之一是存储过程(12c 之前的版本)不能返回隐式结果集。您可以将具有sys_refcursor
的存储过程定义为OUT
参数或返回sys_refcursor
的函数
CREATE OR REPLACE PROCEDURE my_proc( p_rc OUT SYS_REFCURSOR )
AS
BEGIN
OPEN p_rc
FOR SELECT 'foobar' as "Column Header"
FROM dual;
END;
或
CREATE OR REPLACE FUNCTION my_func
RETURN SYS_REFCURSOR
IS
l_rc sys_refcursor;
BEGIN
OPEN l_rc
FOR SELECT 'foobar' as "Column Header"
FROM dual;
RETURN l_rc;
END;
不过,将此逻辑嵌入视图而不是 PL/SQL 块中会更常见
CREATE VIEW my_view
AS
SELECT 'foobar' as "Column Header"
FROM dual;
【讨论】:
以上是关于Oracle:从存储过程重命名列标题的主要内容,如果未能解决你的问题,请参考以下文章