查询谁生成插入语句:无效的数字

时间:2014-09-17 08:28:32

标签: sql oracle

我试图执行一个生成insert语句的查询,如:

select 
  'insert into MYTABLE (
    ID, 
    COLUMN_A, 
    COLUMN_B)
  values (' + 
    ID + ',' +
    COLUMN_A + ',' +
    COLUMN_B  
as INSERTGENERATOR from MYTABLE;

但我有这个错误:

ORA-01722: invalid number
01722. 00000 -  "invalid number"
*Cause:    
*Action:

为什么? 我尝试使用||代替+to_char,但它没有改变。

3 个答案:

答案 0 :(得分:2)

不要将行尾放在引号内。 ||用于连接。

select 
  'insert into MYTABLE (ID, COLUMN_A, COLUMN_B) values (' ||
    ID || ',' ||
    COLUMN_A || ',' ||
    COLUMN_B || ');'
as INSERTGENERATOR from MYTABLE;

答案 1 :(得分:2)

这有效:

SELECT
  'INSERT INTO MYTABLE 
  (ID, COLUMN_A, COLUMN_B)
   VALUES (' || 
    ID || ',' ||
    COLUMN_A || ','||
    COLUMN_B || ');'
AS INSERTGENERATOR 
FROM MYTABLE;

Sample SQL Fiddle

答案 2 :(得分:1)

使用管道“||”连接字符串文字时摆脱所有的痛苦等。只需使用最新的字符串文字功能 q'[]'

SQL> SELECT q'[insert into MYTABLE (
  2  ID,
  3  COLUMN_A,
  4  COLUMN_B)
  5  values ('ID', 'COLUMN_A','COLUMN_B')]'
  6  AS INSERTGENERATOR
  7  FROM DUAL
  8  /

INSERTGENERATOR
-------------------------------------------
insert into MYTABLE (
ID,
COLUMN_A,
COLUMN_B)
values ('ID', 'COLUMN_A','COLUMN_B')

SQL>

干净,不是吗?