Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 甲骨文11G-it';有可能写表值函数吗?_Oracle_Plsql_Resultset - Fatal编程技术网

Oracle 甲骨文11G-it';有可能写表值函数吗?

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

SQL SERVER中,我编写了一些表值函数来执行对数据库的参数化查询,返回的结果集用于创建报告,现在在ORACLE 11中,我需要执行相同的操作,Oracle没有表值函数以及我可以使用的过程、视图和函数

我在网上研究发现,做这项工作必须使用光标,这是唯一的方法吗?有没有更简单、更有效的方法

以下是在Oracle中测试的示例代码:

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