当前位置: 首页 > 面试题库 >

SQL语句中不允许使用本地集合类型

司空胤
2023-03-14
问题内容

我有一个关于在Oracle SQL函数中使用集合的问题。

包中有类型的定义:

/* Types of package*/
create or replace PACKAGE "test" AS

TYPE type_record_1 IS record ( id_num NUMBER , timestamp_num NUMBER,value NUMBER);
TYPE type_table_1 IS TABLE OF type_record_1; 
TYPE type_record_2 IS record ( id_num NUMBER , timestamp_num NUMBER,pValue NUMBER);
TYPE type_table_2 IS TABLE OF type_record_2; 
END test;

问题出在功能_2中。function_2使用来自function_1的输出。当我尝试在function_2中进行选择时,会出现错误消息。错误消息
SQL语句中不允许使用本地集合类型”。

能否请你帮忙?在函数中使用集合有什么问题?

/*function 1*/
FUNCTION function_1
RETURN  type_table_1
IS
table_1 type_table_1;
BEGIN
-- select values from
SELECT id_num, timestamp_num, value --type_record_1 (id_num, timestamp_num, value) 
BULK COLLECT INTO table_1 
    FROM (
      SELECT       
        l.id_num,
        EXTRACT(hour from end_time) * 60 + EXTRACT(minute from end_time) as timestamp_num,
        l.value
      FROM INTERVAL_F l
      WHERE id_num IN (SELECT id_num FROM table_rev)
    );

 RETURN table_1;

 END function_1;


 /*function 2*/
 FUNCTION function_2
         (
          table_1 IN type_table_1
          )
 RETURN type_table_2
 IS 
 table_2 type_table_2;
 BEGIN

 SELECT type_record_2(id_num , timestamp_num , pValue)
 BULK COLLECT INTO table_2 FROM (
 SELECT  id_num
       , timestamp_num 
       , value as pValue
       FROM table(table_1)  -- ERROR IS HERE
       );

 RETURN table_2;
 END function_2;

问题答案:

要达到此目的,您应该使用类似以下内容的方法:

创建或替换类型type_record_1 … /

创建或替换TYPE type_table_1作为type of record_1的表;/

Oracle不允许将软件包中声明的类型强制转换为表。我谈论Oracle直到11,仍然不检查12c的新功能:(。



 类似资料:
  • 问题内容: 我正在尝试使用pyodbc创建一个SQL Server数据库。 失败并显示此错误 多语句事务中不允许使用CREATE DATABASE语句 它失败,因为该方法启动了事务,并且无法在事务内运行。 那么还有其他方法可以使用python执行命令吗? 问题答案: 建立连接时,pyodbc的默认设置符合Python的DB- API规范。因此,当执行第一个SQL语句时,ODBC将开始有效的数据库事

  • 当我搜索要选择的按钮时,我遇到了一个问题。当我尝试使用搜索它时 但是,它给了我一个错误 - 。我阅读了有关此问题的信息,似乎使用解决方案器是解决问题的方法,而不是使用。但是,我无法使 csS 选择器正常工作。这是包含我正在搜索的元素的html片段。 如何选择“pager__item pager__item - last”项目?

  • 问题内容: 我有下面的代码,单击一个元素以弹出一个屏幕并在其中复制文本 但是,当我尝试单击该弹出窗口中的按钮时, 它产生一条错误消息: 这是我要单击的HTML 。该按钮。 我应该怎么写才能单击关闭按钮? 问题答案: Leon的评论提出了正确的信息,即不再支持复合类名称。相反,您可以尝试使用CSS选择器。就您而言,以下代码行应帮助您获取所需的元素: 它在class属性中找到具有所有三个类(actio

  • 我有下面的代码,点击一个元素弹出一个屏幕并复制其中的文本 我应该如何编写以便单击关闭按钮?

  • 我试图获取具有特定类名的所有元素: 然而我得到的错误是: 我知道类名中不允许有空格,但是我该怎么办呢? 谢啦

  • 我试图得到以下每个元素使用 inspect元素的输出如下。 但是它失败了,并抛出下面的错误。 另外,我如何遍历每个类?每个类都包含子部分,我想在进入下一个类之前进一步单独处理这些子部分。