Ich mache die Migration von Oracle auf pgsql und ich habe das die Oracle SQL wie unten:Oracle SQL mit Tabelle() Funktion Problem pgsql
select code,product_no,qty qty from t_ma_tb_inventory
where code is not null and status=2
and update_type in (select * from table(splitstr(:types,',')))
and tb_shop_id=:shopId
order by update_time
und die splitstr Funktion wie unten:
?CREATE OR REPLACE FUNCTION splitstr (p_string text, p_delimiter text) RETURNS SETOF STR_SPLIT AS $body$
DECLARE
v_length bigint := LENGTH(p_string);
v_start bigint := 1;
v_index bigint;
BEGIN
WHILE(v_start <= v_length)
LOOP
v_index := INSTR(p_string, p_delimiter, v_start);
IF v_index = 0
THEN
RETURN NEXT SUBSTR(p_string, v_start);
v_start := v_length + 1;
ELSE
RETURN NEXT SUBSTR(p_string, v_start, v_index - v_start);
v_start := v_index + 1;
END IF;
END LOOP;
RETURN;
END
$body$
LANGUAGE PLPGSQL
SECURITY DEFINER
;
-- REVOKE ALL ON FUNCTION splitstr (p_string text, p_delimiter text) FROM PUBLIC;
kann mir jemand helfen, den entsprechenden Code in pgsql zu schreiben Vielen Dank
Dank, und was ist mit den:? Typen Argument der int ist, was soll ich tun, Sorry, ich bin neu –
pgsql Sie haben nicht gezeigt, wie Sie diese Anweisung ausführen . Aber ich nehme an, dass der Parameter ': types', den Sie dort verwenden, ein 'text'-Wert ist (weil Ihre Funktion dort auch' text' erwartet). Wie und wo ersetzen Sie diese Parameter? Was war der Datentyp von ': types' in Oracle? –
der Datentyp von update_type in Oracle ist int –