вставить таблицу из другой базы данных - PullRequest
0 голосов
/ 25 мая 2011

SQL

INSERT INTO t_publikasi
  ("idPublikasi","kdBahanPustaka","bulanTerbit", "tahunTerbit", "noUrutBI",
   "pdfDir", "judul")
SELECT * 
  FROM dblink('dbname=perpus2 port=5432 user=dbdev password=develop',
              'SELECT '113' || substring("no_pustaka",4,2) as bb ||
                      substring("no_pustaka",6,2) as cc ||
                      substring("no_pustaka",9,4) as dd,
                      '113', 
                      substring("no_pustaka",4,2) as bb,
                      substring("no_pustaka",6,2) as cc,
                      substring("no_pustaka",9,4) as dd,
                      "file_pdf","judul"
                 FROM kuesioner 
             ORDER BY bb, cc, dd') AS kuesioner (
    id varchar(10), 
    kd varchar(10),
    bln varchar(10),
    thn varchar(10),
    urut varchar(10),
    file_pdf varchar(50), 
    judul varchar(50));

ОШИБКИ

ERROR:  syntax error at or near "113"
LINE 1: ...2 port=5432 user=dbdev password=develop','SELECT '113' || su...

                                                            ^
ERROR: syntax error at or near "113"
SQL state: 42601

Ответы [ 3 ]

2 голосов
/ 25 мая 2011

изменить

ВЫБРАТЬ 113

1004 * до

ВЫБРАТЬ 113

или

ВЫБРАТЬ 1131011 *

Надеюсь, это поможет.

0 голосов
/ 25 мая 2011

Используйте E или курс доллара.

...
FROM dblink('dbname=perpus2 port=5432 user=dbdev password=develop',
          $my_dblink_arg$SELECT '113' ||
...
      FROM kuesioner 
         ORDER BY bb, cc, dd$my_dblink_arg$) AS kuesioner
...
0 голосов
/ 25 мая 2011

Когда вы пишете 'SELECT '113'||, вы завершаете второй параметр для вызова dblink (), который содержит инструкцию SELECT, а затем запускаете числовой литерал со значением 113.

'SELECT 113 работает, потому что он будетвыберите число вместо символьного литерала.Оператор || затем бесшумно преобразует это обратно в символьное значение.

Правильный способ встраивания одинарной кавычки в символьный литерал - это написать две одинарные кавычки:

, 'SELECT ''113''||substring(... '

...