首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-00997:非法使用插入到.选择语句

ORA-00997:非法使用插入到.选择语句
EN

Stack Overflow用户
提问于 2017-10-05 04:55:28
回答 1查看 4.9K关注 0票数 0

我正在为将数据从表插入到另一个表的存储过程编写代码。我使用的语句如下:

代码语言:javascript
复制
Procedure ImportData(
  IMPORT_DATE_FROM date
  ,IMPORT_DATE_TO date  
  ,SEQ_ID int
)
AS
INSERT_DAY nvarchar2(10);
IMPORT_MONTHYEAR nvarchar2(10);
IMPORT_DATE_FROM_INT NUMBER;
IMPORT_DATE_TO_INT NUMBER;
IMPORT_DATE varchar2(20);
--LOG_ID, BATCH_ID have been of type NUMBER and varchar2
IN_LOGID mytable.LOG_ID%TYPE; 
IN_BATCHID mytable.BATCH_ID%TYPE;
BEGIN

IMPORT_DATE_FROM_INT := to_number(to_char(IMPORT_DATE_FROM, 'j'));
IMPORT_DATE_TO_INT := to_number(to_char(IMPORT_DATE_TO, 'j'));

--even assigned it to a nubmer then insert throws exception
IN_LOGID:=10;
IN_BATCHID:10; 
    for cur_r in IMPORT_DATE_FROM_INT ..IMPORT_DATE_TO_INT loop
    IMPORT_DATE := to_char(to_date(cur_r, 'j'), 'yyyy-MM-dd');
    INSERT_DAY:=SUBSTR(IMPORT_DATE,9,2);
    IMPORT_MONTHYEAR:=SUBSTR(IMPORT_DATE,1,7);
    INSERT INTO mytable
    (LOGID,BATCHID,TEXT1,TEXT2,TEXT3,...)
    SELECT
    (IN_LOGID,IN_BATCHID, table1.field1, table2.field2,....)
    FROM table1 
    INNER JOIN table2
    on table1.dayId= 
    CASE 
    WHEN INSERT_DAY='01' THEN table2.day1
    WHEN INSERT_DAY='02' THEN table2.day2
    ....
    WHEN INSERT_DAY='31' THEN table2.day31
    END
    INNER JOIN table3
    .....
    END LOOP;

问题似乎出现在(LOGID&BATCHID),因为当我将select子句中的“IN_BATCHID”和“IN_LOGID”替换为硬代码3(或任何数字)时,这个过程就能正常工作了。我在网上搜索过,得到了类似的信息。

数据类型LONG的值用于函数或不同的、其中、CONNECT BY、GROUP或ORDER子句中。长值只能在SELECT子句中使用。

因此,我尝试将bacthid列从number更改为varchar2 (当然还有过程中变量IN_BATCHID的类型),但是抛出了相同的异常。

对于mytable、TEXT1、TEXT2...are类型的VARCHAR2,可能也很有用;而table1,表2是表1的表和表1的表,字段1是int的类型,表2是varchar的类型。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2017-10-05 05:41:20

首先,不推荐长数据和长原始数据类型。我建议您使用CLOB、BLOB和BFILE。

对于长数据类型表单varchar2,您可以尝试这样的转换:

代码语言:javascript
复制
declare 
 v_str   varchar(4000); 
 v_lraw  long raw; 
begin
 v_str := utl_raw.cast_to_varchar2(v_lraw);
 ... 

您可以在insert语句中使用这个v_str

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46578105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档