0
私はpgsqlのOracleからの移行をやっていると私は以下のようなOracleのSQLました:のOracle SQL()関数の問題
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
、以下のようなsplitstr機能:
を?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;
誰かがpgSQLでは同等のコードを書くために私を助けることができる
感謝、そして何について:タイプ引数はintで、私が何をしなければなら申し訳ありませんが、私は –
をpgSQLのために新しいですあなたは、そのステートメントを実行する方法を示していません? 。しかし、あなたが使用するパラメータ ':types'は' text'値であると仮定しました(あなたの関数も 'text'を期待しているからです)。どのようにこれらのパラメータを置き換えるのですか? Oracleの ':types'のデータ型は何ですか? –
oracleのupdate_typeのデータ型はint –