У меня есть скрипт для Oracle. Я не знаю, как эта часть скрипта должна быть перемещена в PostgreSQL.
Я переписываю функцию, генерирующую первичный ключ, в PostgreSQL. Можете ли вы помочь мне?
Oracle код:
cGet cursor(pTABLE_NAME NVARCHAR2) is
select OBJECT_ID
from SYS_OBJECT
where OBJECT_NAME = lower(pTABLE_NAME);
Как написать это на PostgreSQL?
Полный код:
CREATE OR REPLACE function mySchema.genPrimKey(pTABLE_NAME NVARCHAR2) return NVARCHAR2 is
xResult NVARCHAR2(10);
xNextVal NUMBER;
xSQL VARCHAR2(1000);
lcRegistr1 NVARCHAR2(1);
...
lnRegistr1 NUMBER;
...
cursor cGet(pTABLE_NAME NVARCHAR2) is
select OBJECT_ID
from SYS_OBJECT
where OBJECT_NAME = lower(pTABLE_NAME);
rGet cGet%ROWTYPE;
TYPE tArray is table of NVARCHAR2(1) index by binary_integer;
xArrayLV tArray;
begin
open cGet(pTABLE_NAME);
fetch cGet into rGet;
close cGet;
if (rGet.Object_Id is null) then
raise eObjNull;
end if;
xSQL:='select SEQ$'||upper(replace(trim(pTABLE_NAME),'_'))||'.nextval from dual';
execute immediate xSQL into xNextVal;
if (xNextVal is null) then
raise eNextVal;
end if;
if (62 * 62 * 62 * 62 * 62) < xNextVal then
raise eExtend;
end if;
lcRegistr1:= '0';
...
lnRegistr1:= 0;
...
xArrayLV( 1):= '0';
xArrayLV( 2):= '1';
...
xArrayLV(61):= 'y';
xArrayLV(62):= 'z';
--look 5 registr
IF (1 * 62 * 62 * 62 * 62) < xNextVal then
FOR i in 1..62 loop
IF (i * 62 * 62 * 62 * 62) < xNextVal then
lnRegistr1:= i * 62 * 62 * 62 * 62;
lcRegistr1:= xArrayLV(i + 1);
end if;
end loop;
END IF;
xNextVal:= xNextVal - lnRegistr1;
....
xResult:= lcRegistr1 || lcRegistr2 || lcRegistr3 || lcRegistr4 || lcRegistr5;
return rGet.Object_Id||'!'||xResult;
exception
...
end genPrimKey;
Если вам нужно - я могу отправить вам скрипт по электронной почте. Это Oracle код, и я должен переписать его на PostgreSQL, но я не понял эту часть.