Oracle 甲骨文11G-it';有可能写表值函数吗?
在SQL SERVER中,我编写了一些表值函数来执行对数据库的参数化查询,返回的结果集用于创建报告,现在在ORACLE 11中,我需要执行相同的操作,Oracle没有表值函数以及我可以使用的过程、视图和函数 我在网上研究发现,做这项工作必须使用光标,这是唯一的方法吗?有没有更简单、更有效的方法 以下是在Oracle中测试的示例代码:Oracle 甲骨文11G-it';有可能写表值函数吗?,oracle,plsql,resultset,Oracle,Plsql,Resultset,在SQL SERVER中,我编写了一些表值函数来执行对数据库的参数化查询,返回的结果集用于创建报告,现在在ORACLE 11中,我需要执行相同的操作,Oracle没有表值函数以及我可以使用的过程、视图和函数 我在网上研究发现,做这项工作必须使用光标,这是唯一的方法吗?有没有更简单、更有效的方法 以下是在Oracle中测试的示例代码: CREATE OR REPLACE PROCEDURE SP_EST_PRUEBAS(P_ODS IN NUMBER, LISTADO OUT SYS_REFCUR
CREATE OR REPLACE PROCEDURE SP_EST_PRUEBAS(P_ODS IN NUMBER, LISTADO OUT SYS_REFCURSOR)
AS
BEGIN
OPEN LISTADO FOR
SELECT
field1,
COUNT(field1) AS count_field1
FROM table1 A
INNER JOIN table2 b ON b.idtable = A.idtable
WHERE A.idods = P_ODS
GROUP BY field1;
END SP_EST_PRUEBAS;
/
-- testing in Oracle SQL Developer
VARIABLE mycursor refcursor;
EXEC SP_EST_PRUEBAS (3836, :mycursor);
PRINT mycursor
/
我非常感谢您在这方面的建议。什么类型的对象可以给我最好的性能?一切都取决于调用它的程序以及它期望得到什么回报。带上你的MSSQL护目镜。一个rdbms中的最佳实践通常是另一个rdbms中的最差实践——这是双向的。除非您的数据量真的很大,否则性能不应该是一个问题——当然不是在过程和函数之间进行选择,因为它们都只是用PL/SQL编写的代码。Oracle11g已经过时了,而且,除非你付出高昂的代价,否则实际上已经失去了支持。欢迎来到SO社区。请参加考试并复习。以此作为模板,可以大大增强您获得满意答案的能力。特别是,您需要表描述(DDL)、示例数据(无图像)以及该数据的预期输出。对于我们这些不使用SQL server的人来说,描述表值函数可能也很有用。您应该去掉final,因为它运行的是最后一条SQL语句或PL/SQL块,而不是SQL*Plus命令,如
print
或exec
。