我创建了一个功能:函数返回没有在甲骨文
create or replace function get_columns
(v_table_name IN varchar2)
RETURN VARCHAR2
AS
v_columns_list VARCHAR2(2048);
BEGIN
SELECT listagg(column_name,',') WITHIN GROUP (ORDER BY column_name) AS t_list into v_columns_list
FROM ALL_TAB_COLUMNS WHERE owner='MyOwner' AND table_name=v_table_name;
RETURN v_columns_list;
END;
当我测试这个功能就没什么可输出返回:
declare
v_columns_list varchar2(2048);
v_table_name varchar2(100) := 'MyTable';
begin
-- SELECT listagg(column_name,',') WITHIN GROUP (ORDER BY column_name) AS t_list INTO v_columns_list
-- FROM ALL_TAB_COLUMNS WHERE owner='MyOwner' AND table_name=v_table_name;
v_columns_list := get_columns(v_table_name);
dbms_output.put_line(v_columns_list);
end;
结果:
anonymous block completed
然而,当我测试相同的“SELECT INTO”语句,它工作正常,并返回串联的字符串:
declare
v_columns_list varchar2(2048);
v_table_name varchar2(100) := 'MyTable';
begin
SELECT listagg(column_name,',') WITHIN GROUP (ORDER BY column_name) AS t_list INTO v_columns_list
FROM ALL_TAB_COLUMNS WHERE owner='MyOwner' AND table_name=v_table_name;
-- v_columns_list := get_columns(v_table_name);
dbms_output.put_line(v_columns_list);
end;
为什么会这样呢?
为什么你一旦你有结果递归调用相同的函数? – kevinsky 2015-03-13 16:22:47
适合我。您确定dbms_output已启用? – OldProgrammer 2015-03-13 17:11:49
你有'owner ='MyOwner''和'v_table_name varchar2(100):='MyTable';'。我认为这些都是你给出的例子。在你的真实情况下,他们是大写?如果不是,请尝试使它们成为大写。 – Boneist 2015-03-13 17:19:16