如何 return 1,2,3.... 到 N 在与 ORACLE 中的函数不同的行中?
How to return 1,2,3.... to N in a separate row from function in ORACLE?
我是 oracle.I 的新手,想将一个数字发送到一个函数,并想打印 n.1,2...n 的值
假设如果我发送 n=5 那么我的输出将是这样的,
-------
i |
-------
1 |
2 |
3 |
4 |
5 |
假设如果我通过 n=10 那么,
-------
i |
-------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
当我通过时,n=10 然后我的输出是,
-------
i |
-------
10 |
我试过:
CREATE OR REPLACE FUNCTION OT.NUMBER_GEN(
data1 NUMBER
)
return VARCHAR2
IS
V_ALL_NUMBER VARCHAR2
BEGIN
FOR REC IN data1
Loop
V_ALL_NUMBER := REC;
END LOOP;
RETURN V_ALL_NUMBER;
END OT.NUMBER_GEN;
您可以使用递归查询来生成数字。
with cte (ct) as (
select 1 as ct from dual
union all
select ct + 1 from cte
where ct < 10
) select ct from cte
创建自定义嵌套 table 数字并具有函数 return 类型:
create or replace type number_nt is table of number;
create or replace function number_gen(data1 number) return number_nt is
v_numbers number_nt := number_nt();
begin
for i in 1 .. data1 loop
v_numbers.extend;
v_numbers(v_numbers.count) := i;
end loop;
return v_numbers;
end;
/
select * from table(number_gen(5));
但是,创建数字列表的最简单方法是 SQL 语句:
select level i from dual connect by level <= 5;
我是 oracle.I 的新手,想将一个数字发送到一个函数,并想打印 n.1,2...n 的值
假设如果我发送 n=5 那么我的输出将是这样的,
-------
i |
-------
1 |
2 |
3 |
4 |
5 |
假设如果我通过 n=10 那么,
-------
i |
-------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
当我通过时,n=10 然后我的输出是,
-------
i |
-------
10 |
我试过:
CREATE OR REPLACE FUNCTION OT.NUMBER_GEN(
data1 NUMBER
)
return VARCHAR2
IS
V_ALL_NUMBER VARCHAR2
BEGIN
FOR REC IN data1
Loop
V_ALL_NUMBER := REC;
END LOOP;
RETURN V_ALL_NUMBER;
END OT.NUMBER_GEN;
您可以使用递归查询来生成数字。
with cte (ct) as (
select 1 as ct from dual
union all
select ct + 1 from cte
where ct < 10
) select ct from cte
创建自定义嵌套 table 数字并具有函数 return 类型:
create or replace type number_nt is table of number;
create or replace function number_gen(data1 number) return number_nt is
v_numbers number_nt := number_nt();
begin
for i in 1 .. data1 loop
v_numbers.extend;
v_numbers(v_numbers.count) := i;
end loop;
return v_numbers;
end;
/
select * from table(number_gen(5));
但是,创建数字列表的最简单方法是 SQL 语句:
select level i from dual connect by level <= 5;