"Синтаксическая ошибка в или рядом с ','" при попытке выбрать INTO - PullRequest
0 голосов
/ 05 мая 2018

Запрос на выбор нескольких значений и присвоение нескольким переменным в одном запросе SELECT приводит к ошибке. Моя версия Postgres - 9.5.
Запрос:

 SELECT INTO region_id ,doc_type,tax_amt fk_bint_supplier_tax_region_id,chr_supporting_document_type,
dbl_base_currency_client_net-dbl_base_currency_market_fare-dbl_base_currency_cc_charge_collected+
dbl_base_currency_vat_in+dbl_base_currency_cc_charge_collected+(19*(dbl_base_currency_tax))*5/10   
FROM tbl_sales_details   WHERE chr_document_status='N' AND vchr_document_no='INV/47922/01/18'
AND vchr_supporting_document_no='5111143004'

Ошибка:

ERROR:  syntax error at or near ","
LINE 1:  SELECT INTO region_id ,doc_type,tax_amt fk_bint_supplier_ta...
                               ^

********** Ошибка **********

ERROR: syntax error at or near ","
SQL state: 42601

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Сообщение об ошибке указывает, что вы выполняете оператор как обычный SQL. Но это имеет смысл только внутри блока PL / pgSQL. Вы прямо заявили, что это для:

присвоение нескольким переменным

, который имеет смысл только в коде процедурного языка, поскольку в простом SQL нет присвоений переменных. SELECT INTO внутри PL / pgSQL имеет значение, отличное от SQL SELECT INTO - использование которого, как правило, не рекомендуется. Руководство:

CREATE TABLE AS функционально аналогичен SELECT INTO. CREATE TABLE AS является рекомендуемым синтаксисом, так как эта форма SELECT INTO не доступны в ECPG или PL / pgSQL, потому что они интерпретируют предложение INTO по-другому. Кроме того, CREATE TABLE AS предлагает расширенный набор функциональность обеспечивается SELECT INTO.

В размещении предложения INTO нет ничего плохого - при использовании в PL / pgSQL, как вы отметили.

Связанный:

0 голосов
/ 05 мая 2018

Вы ставите into после списка столбцов:

SELECT region_id, doc_type,tax_amt fk_bint_supplier_tax_region_id, chr_supporting_document_type,
       (dbl_base_currency_client_net - dbl_base_currency_market_fare - 
        dbl_base_currency_cc_charge_collected + 
        dbl_base_currency_vat_in + dbl_base_currency_cc_charge_collected + 19 * dbl_base_currency_tax
       ) * 5/10   
INTO . . . 
FROM tbl_sales_details
WHERE chr_document_status = 'N' AND
      vchr_document_no = 'INV/47922/01/18' AND
      vchr_supporting_document_no = '5111143004';

Я не знаю, как называются имена переменных, но идет после INTO, и для каждого выражения в SELECT должен быть один.

...