0

ユーザー定義型のストアドプロシージャをPlPythonで記述しています。Plpythonがユーザー定義型をサポートしていないことを知っているので、ユーザー定義型のCASTを作成しました。それでも、plpy.prepareを呼び出すとエラーが発生し続けます。CASTを誤って使用しているかどうかはわかりません-サンプルコードは次のとおりです。

#User Defined Type - person
CREATE TYPE person As( name character varying(50), state  character(2));

#Table definition using 'person'
CREATE TABLE manager As(id integer, mgr person)

#CAST for person
CREATE OR REPLACE FUNCTION person_to_text(person) RETURNS text AS 'SELECT ROW($1.*)::text' LANGUAGE SQL;
CREATE CAST (cv_person as text) WITH FUNCTION person_to_text(person)

#PlPython procedure

CREATE OR REPLACE FUNCTION load_portfolio_assoc (name text, state text) RETURNS integer AS $$

  mgr_str ="('"+name+"','"+state+"')"

  insert_qry = 'Insert into manager (mgr) values($1)'
  value_type = ['text']

  qry = plpy.prepare(insert_qry,value_type)   
  rv  = plpy.execute(qry, [mgr_str])

  return 1


  $$ LANGUAGE plpython3u;
4

1 に答える 1

2

アップデート :

Plpythonは、この形式の変数で指定されたユーザー定義型を使用して次のように記述されている場合、クエリを受け入れます$ 1 ::、サポートされていない複合型の例外のスローを停止します。

insert_qry = 'Insert into manager (mgr) values($1::person)'
value_type = ['text']

最後に、データベースに対して余分なキャスト操作を行う必要はありませんでした。上記のように変数を微調整するだけで機能しました。

于 2012-02-12T18:50:58.090 に答える