1
select dblink_exec('hostaddr=59.89.210.56 port=5432 dbname=mydb user=postgres password=****','insert into gtab04 (productid,product,itgrid,itemtype,patentid,taxid,convfact,boxpack,cntid )values (2301,''D PEARL 2000 Caps 10's'',4,2,7,3,10,'''',0)')

このクエリを実行すると、次のエラーが発生します

ERROR:  syntax error at or near "s"
LINE 2: ...oxpack,cntid )values (2301,''D PEARL 2000 Caps 10's'',4,2,7,..

問題は製品名にあります。つまり、私の製品名は D PEARL 2000 Caps 10's です ('' が問題になると思います) クエリはこれを ''D PEARL 2000 Caps 10''' と連結します <- ここに問題があります

4

3 に答える 3

1

これがお役に立てば幸いです。

関数の作成または置換 create_or_update_test_employee_table() はトリガーを $_$ として返します
宣言する
    クエリ テキスト;
    fname テキスト;
    名前テキスト;
    ID 整数;
    created_at タイムスタンプ;
始める
    fname = NEW.first_name;
    lname = NEW.last_name;

    IF (TG_OP = '挿入') THEN
        ID = NEW.ID;
        query = 'insert into test_employee(id, first_name, last_name) values(''' || id || ''',''' || fname || ''',''' || lname || ''' )';
        PERFORM dblink_exec('dbname=test_db',query);
        戻る新しい;
    END IF;

    IF (TG_OP = '更新') THEN
        ID = OLD.ID;
        query = 'update test_employee set first_name = ''' || fname || ''', last_name = ''' || 名前 || ''' WHERE id = ' || ID ||'';
        PERFORM dblink_exec('dbname=test_db',query);
        戻る新しい;
    END IF;

    IF(TG_OP = '削除') THEN
        PERFORM dblink_exec('dbname=test_db','DELETE FROM test_employee WHERE id = ' || OLD.id);
        古いものに戻ります。
    END IF;

$_$ 言語 'plpgsql' を終了します。
于 2014-10-15T11:15:10.670 に答える
0

Caps 10'sキャップであるべき10''''s

dblink の単一引用符を 1 回二重引用符で囲み、2 回目は文字列内に配置します。

于 2014-03-16T23:47:06.107 に答える
-1

一重引用符をエスケープする

D PEARL 2000 Caps 10\'\'s

于 2014-03-15T10:34:39.800 に答える