1
        CREATE OR REPLACE FUNCTION chkfunction(schemaname text, state text, wallmaterial text, roofmaterial text)
            RETURNS text AS
            $BODY$   
            DECLARE 
            tblinclusion text;

        BEGIN


            execute'if (SELECT exists( select schema_name FROM information_schema.schemata WHERE schema_name = '||$1 ||') )
            then
            tblinclusion:="yes";
            return tblinclusion;
            else
            tblinclusion:="no";
            return tblinclusion;'
            Using schemaname;
        END;
        $BODY$
        LANGUAGE plpgsql

しかし、それはエラーをスローしています:

syntax error at or near "if"
LINE 1: if (SELECT exists( select schema_name FROM information_schem...
4

1 に答える 1

0

まず、Stackoverflow を初めて使用するように思われる方のために、エチケットと投稿のヒントをいくつか紹介します。

  • 関連するバージョン情報を必ず含めてください。ここに、おそらく PostgreSQL のバージョン情報を含めたいと思うでしょう。
  • やりたいことを簡潔に簡潔に説明する
  • 関連するソースコードを含めてください(あなたがやった...いい仕事です)
  • エラーがあれば含めてください(これはあなたがやったことです...繰り返しますが、いい仕事です)
  • 結果がどうなりたいかを説明する
  • フォローアップして回答をマークします。多くの人にとって、正解を認めないと、何の役にも立ちません。ただのヒント。

上記のすべてを行っていないため、推測が残っているため、コードに基づいていくつかの仮定を立てています. スキーマが存在する場合は「はい」、スキーマが存在しない場合は「いいえ」というテキストを返したいようです。それがあなたの希望でない場合は、質問を更新してください。正しければ、次のように動作するはずです。

CREATE OR REPLACE FUNCTION chkfunction2(schemaname text)
RETURNS text AS
$BODY$   
DECLARE 
BEGIN

    PERFORM schema_name FROM information_schema.schemata WHERE schema_name = $1; 

    IF FOUND THEN
        RETURN 'yes';
    ELSE
        RETURN 'no';
    END IF;

END;
$BODY$
LANGUAGE plpgsql

注: 追加の変数や宣言は必要ないと思うので、省略しました。また、私のソリューションは PostgreSQL 9.1 で開発およびテストされていることに注意してください。

StackOverflow へようこそ!

于 2013-06-05T18:15:49.670 に答える