問題

私は次の機能を実行中にエラーが発生しています。私はかなりいつか頭を叩いています。私はoracleに新しいので、修正することができません。誰かが助けてくれますか?

 create or replace function rever(x int)
return number
is
y varchar2(30);
c varchar2(30);
v int;
begin
y:=to_char(x);
c:=reverse(y);
v:=to_number(c);
return v;
end rever;
/
 

以下はエラーメッセージとして表示されています

 LINE/COL ERROR
-------- ----------------------------------------------------------------- 
9/1      PL/SQL: Statement ignored 
9/4      PLS-00201: identifier 'REVERSE' must be declared
 

  ベストアンサー

OracleにはPL/SQL reverse()関数はありません。したがって、これは機能しません。

 declare
  v varchar2(20);
begin
  v:= reverse('krow not does ti');
  dbms_output.put_line(v);
end;  
/
 

あなたが得たPLS-00201エラーをスローします。

ただし、PL/SQLで使用できる文書化されていないSQL関数がありますが、SQLエンジンを呼び出すだけです。

 declare
  v varchar2(20);
begin
  select reverse('skrow ti') into v from dual;
  dbms_output.put_line(v);
end;  
/
 

もちろん、reverse()は文書化されていないため、少なくともプロダクションコードでは使用するはずではありません。なぜそれが文書化されていないのか分かりません。私はOracleが逆インデックスに使用すると思うので、リバース可能な文字列サイズにはいくらかの制限があります。

ここに db<> fiddle デモがあります。


パフォーマンスは少し悪いです

私はそれがPL/SQLエンジンからSQLエンジンに戻って再び移動するコストだと思います。したがって、ユースケースになります。純粋なPL/SQLでのみ使用される関数を書いている場合は、あなたのアプローチがより良いものだと思います。しかし、SQLで使用する関数を書いている場合は、サポートされていなくても、代わりにOracle built-inを使用することを検討します。

正直言って、私はreverse()関数を使用した最後の時間を覚えていません - Oracleまたはハンドロール - 実生活で(フォーラムや同様のCode Golfの質問に答えるのではなく:))。

  同じタグがついた質問を見る

plsqloracle10g