PL/SQL: Változó használata tárolt eljárásban
2019-01-17T10:17:30+01:00
2019-01-17T10:41:22+01:00
2022-08-11T09:30:30+02:00
VaMa
Sziasztok!

Nem nagyon vagyok jártas oracle-ben, de ebben kell dolgoznom.
Szeretnék PL/SQL-en keresztül egy tárolt eljárást létrehozni, ami egy deklarált változóban sorból egysoros string összefűzést csinál vesszővel elválasztva, ez alapján indultam el: link

Sajnos már az elején megakadtam, mikor változót akarok létrehozni egy tárolt eljárásban. Az alábbi hibaüzenetet kapom:

Compilation errors for PROCEDURE AUTOUI.SP_CUSTOM_QUERY

Error: PLS-00103: Encountered the symbol "COLUMNS" when expecting one of the following:

begin function pragma procedure subtype type <an identifier>
<a double-quoted delimited-identifier> current cursor delete
exists prior external language
Line: 2
Text: columns varchar2(2000);

A szkriptem eddig:

create or replace procedure SP_CUSTOM_QUERY(BF_ID IN NUMBER) as columns varchar2(300); db varchar2(50); tbl varchar2(50); sql_ varchar(3000); begin select listagg(BF_FIELD_VALUE_MEMBER,', ') within group(order by FIELD_SORT) csv into columns from BF_FIELDS where BF_ID=BF_ID and STATUS <> 'N'; select BF_FROM_DB into db where BF_ID=BF_ID and STATUS <> 'N'; select BF_FROM_TABLE into tbl where BF_ID=BF_ID and STATUS <> 'N'; sql_:='SELECT '+SUBSTR(columns, 2, LENGTH(columns) - 2)+' FROM '+db+'.'+tbl+';'; execute immediate sql_; end SP_CUSTOM_QUERY;
Hogyan tudom működőképessé tenni?

V.M.
Mutasd a teljes hozzászólást!
Gyors Google keresés alapján a "columns" egyike a PL/SQL fenntartott szavainak, így nem használható azonosítóként, viszont összezavarod vele a parsert. Válassz olyan változóneveket, amik nincsenek rajta a fenntartott szavak listáján.
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd