• 締切済み

oracle ファンクションの実行

oracleでファンクションを作成しております。 このファンクションをVisualBasicより実行しているのですが、 以下のエラーが出力される状況です。 ORA-06550: 行1、列8: PLS-00553: キャラクタ・セット名が認識されません。 ORA-06550: 行0、列0: どのように対処すれば良いか分らず、 どなたか分る方がいらっしゃればご教授頂けますと 幸いです。 ★作成したファンクション CREATE OR REPLACE FUNCTION HINODE.H_HND8010U ( p_in_yoyakuid in varchar2) RETURN varchar2 --********************************************************* --* □ プロシージャ名 --* H_HND8010U --********************************************************* IS vSum varchar2(10); BEGIN vSum := p_in_yoyakuid; RETURN vSum; END; /

  • Oracle
  • 回答数1
  • ありがとう数0

みんなの回答

  • tkf-
  • ベストアンサー率58% (821/1396)
回答No.1

NLS_LANGの設定がうまくいっていないのではないでしょうか。 http://otndnld.oracle.co.jp/easy/dotnet/extra/index.html レジストリ設定が必要なのかな?

関連するQ&A

  • ストアドファンクションの実行

    CREATE OR REPLACE FUNCTION hoge(str IN VARCHAR2) ~ を作成した後、 PL*SQLにてSQL> exec hoge('fuga'); を実行すると、 行1でエラーが発生しました。: ORA-06550: 行1、列7: PLS-00221: 'hoge'がプロシージャではないか、または未定義です・ ORA-06550: 行1、列7: PL/SQL: Statement ignore と言われます。 どうすればエラーを解決できますでしょうか? 助言を宜しくお願い致します。

  • ストアドファンクションの戻り値をテーブルに・・

    SQL/PLUSにて作成したファンクションの戻り値で返ってきた文字列をテーブル名として使用するにはどうすればよいのでしょうか?? まず以下のようにSQL/PLUSにてFUNCTIONを作成しました。 create or replace function FuncXXXXX (inA varchar2) return varchar2 is OutA varchar2; begin select MAX(table_name) into outA from all_tables where table_name like inA || '%'; return outA end; / それを以下省略ですが、テーブルでコールしようとするとエラー(ORA-00905:キーワードがありません)が発生します。このような使い方はできないのでしょうか? select   ・   ・ from AAAA inner join FuncXXXXX(inA) ※execute FuncXXXXX(inA)でも同様 on   ・   ・ 申し訳ありませんが宜しくお願いします。

  • oracleのfunctionで戻り値複数個

    oracleのストアドプロシージャのファンクションについてですが、 ファンクションは、戻り値を返すことができますが、 それを、複数個返すことはできるのでしょうか。 CREATE [OR REPLACE] FUNCTION ファンクション名(引数 IN データ型[, ...]) RETURN 戻り値の型 IS 宣言部 BEGIN 処理部 END ; お願いします。

  • ストアドファンクションがうまく作成できない

    SQL Server 2005 にて、 以下のようなストアドファンクションを作成しようとしても、 「メッセージ 156、レベル 15、状態 1、プロシージャ TestKansu、行 30 キーワード 'end' 付近に不適切な構文があります。」 といったエラーメッセージが表示されてしまい、 うまく作成できません。。 文法など、いろいろ調べてみたところ、特に問題なさそうな 感じではあるのですが。。 どこに問題があるのか、どなたかご教授願えないでしょうか? なにとぞ、よろしくお願いいたします。 -------------------------------- use tempdb go -- 呼び出し形式 create function TestKansu ( @Date as datetime, @Type as varchar(1) ) returns @ReturnTable table ( StartDate varchar(8), EndDate varchar(8) ) as begin if @Type is null begin raiserror('正しいtypeを指定してください',-1,-1) end if @Date is null begin SET @Date = getdate() end if @Type = '0' begin insert into @ReturnTable select convert(varchar(8), dateadd(dd ,-2 ,@Date), 112) as StartDate, convert(varchar(8), dateadd(dd ,-2 ,@Date), 112) as EndDate, end if @Type = '1' begin insert into @ReturnTable select convert(varchar(8), @Date, 112) as StartDate, convert(varchar(8), @Date, 112) as EndDate end return end --------------------------------

  • PL/SQLでファンクション名に変数を使用するには

    PL/SQLでファンクションの呼出を行いたいと思っています。 そこでファンクション名を変数で指定したいと思っているのですがうまくいきません。 ファンクション FUNCTION Check ( pi_Syori_No   IN NUMBER,  -- 処理No. po_Function_Name OUT VARCHAR2  -- ファンクション名 ) RETURN BOOLEAN IS TYPE Test_List IS VARRAY(100) OF VARCHAR2(10) NOT NULL; TYPE FcNameList IS VARRAY(100) OF VARCHAR2(10) NOT NULL; MmsCheckList Test_List := Test_List('○','×'); FcNameCheckList FcNameList := FcNameList('Check','Check'); BEGIN IF MmsCheckList(pi_Syori_No) = '○' THEN po_Function_Name :=FcNameCheckList(pi_Syori_No); ELSE po_Function_Name :=NULL; END IF; RETURN TRUE; EXCEPTION WHEN OTHERS THEN RETURN FALSE; END Check; メイン CREATE OR REPLACE PROCEDURE Test ( po_Out OUT VARCHAR2 ) IS Modoriti BOOLEAN :=TRUE; F_Neme VARCHAR2(2000) :=NULL; BEGIN IF Check(1,F_Neme) = TRUE THEN Modoriti := F_Neme(2,F_Neme); END IF; EXCEPTION WHEN OTHERS THEN po_Out := 'エラー'; END Test; この状態で実行すると下記のエラーが出てしまいます。 [PLS-00222: この有効範囲内に、名前'F_Neme'の関数は存在しません。] ファンクション名に変数を使うのは無理なのでしょうか? よろしくお願いいたします。

  • ASPでのOracleへの接続

    いつもお世話になっています。 ASPでのOracleへの接続について質問させていただきます。 ASPファイルの中でOracleへ接続し、テーブルを更新するストアドファンクションを呼び出す処理を作成しているんですが、そのASPファイルを開くと 次のようなエラーが表示されてしまいます。 //////////////////////////////////////////////////////// エラー タイプ Microsoft OLE DB Provider for Oracle (0x80040E14) ORA-06550: 行1、列7: PLS-00221: 'TEST_T_FUNC'がプロシージャではないか、または未定義です。 ORA-06550: 行1、列7: PL/SQL: Statement ignored /test_asp.asp, line 113 //////////////////////////////////////////////////////// 呼び出し先がプロシージャの場合はテーブルは正常に更新されますが、 ファンクションだと上のエラーが起こってしまうようです。 ファンクションを呼び出しても正常に更新されるようにしたいのですが どのようにすればいいでしょうか? よろしくお願いします。

  • ストアドプロシジャって別名でコールできないのでしょうか?

    VBの方で質問したらいいのか悩んだのですが、 Oracleのハナシっぽいのでこちらで。 BBBユーザーで AAAユーザーのP01_TESTストアドプロシジャに対する プライベートシノニム「P01_TEST」を作成したのですが、 VBからBBBユーザーにてoo4oで実行するとき、 BEGIN P01_TEST(abc);END; でExecuteSQLしてもエラーとなります。 SQL execution error, ORA-06550: 行 1、列 7: PLS-00201: 識別子 AAA.P01_TESTを宣言してください。 ORA-06550: 行 1、列 7: PL/SQL: Statement ignored BBBユーザーから、P01_TESTをコールするにはどうしたらいいのでしょうか?

  • テーブル名が可変の動的SQLをファンクションにしたい

    Oracle9iのWindowsXP環境です。 以下のようなPL/SQLを作成しましたが、同じようなselect文の繰り返しなので整理したいのと、レスポンスが悪いのでファンクションにしたいのですが、テーブル名が可変のため上手くいきません。「Table&1」は置換変数で、batファイルからパラメータが渡り、「Table200812」のように変更されます。 【***.bat】 set /p phara sqlplus -s ***/***@*** ***.sql %phara% 【***.sql】 省略 begin select aaa into a1 from Table&1 where code = 'AAAAA'; ・・ select aaa into a2 from Table&1 where code = 'BBBBB'; ・・ select aaa into a3 from Table&1 where code = 'CCCCC'; ・・ 省略 end; / 以下、試しに作成しようとしたファンクションですが、やはり予想どおりですが「表がありません」とコンパイルエラーになります。 create function Func_test(code IN varchar2, Table1 IN varchar2) return number is ret number; begin select aaa into ret from Table1 where code = 'code'; return ret; end; / ※コール側は、「a1 = Func_Test('AAAAA', Table&1);」 そもそもこれが実現できたとしてレスポンスが上がるものなのでしょうか?どちらにせよコードを整理する意味でもファンクションにはしたいのですが。。 宜しくお願い致します。

  • PL/SQLのエラーについて

    こんばんは。PL/SQLのエラーについて質問させて頂きます。 現在、Oracle8.1.7のデータベースを使用したオラクルのE-business Suiteという人事系システムで開発をしています。 そこで、SQL*Plusを使用してPL/SQLのパッケージをコンパイルしたところ、パッケージ仕様部も本体部もコンパイルのエラーは出なかったのですが、E-business SuiteにPL/SQLを設定し、動作させようとしたら、下記のようなエラーが発生しました。 -------------------------------------------------------------------- FDPSTP 内のOracleエラー 6550 原因: ORA-06550: 行 1、列 7: PLS-00221: 'ZT_TYOUHYOU_HENSEI_PKG'がプロシージャではないか、または未定義です。 ORA-06550: 行 1、列 7: PL/SQL: Statement ignored が原因で FDPSTP に失敗しました。 --------------------------------------------------------------------- また、作成したPL/SQLパッケージの仕様部は下記のとおりです。 -------------------------------------------------------------------- CREATE OR REPLACE PACKAGE APPS.ZT_TYOUHYOU_HENSEI_PKG AS FUNCTION get_henseihyo_kbn (i_grade IN VARCHAR2,o_hensei_kbn OUT VARCHAR2) RETURN NUMBER; <・・・・・中間部分は省略・・・・・> PROCEDURE main_shori (p_process_date IN VARCHAR2, p_location IN VARCHAR2); END ZT_TYOUHYOU_HENSEI_PKG; -------------------------------------------------------------------- 原因だと思われる心当たりの部分も探してみたのですが、このエラーの意味は何なのか、原因はどこにあるのか分かりません。 どなたかお判りの方、御回答よろしくお願い致します。

  • Mysql ストアドファンクション 意図しない結果

    以下の通りストアドファンクションを作成しました。 関数名:fgetLineNew インパラメータ:shop Varchar 8 ※1つだけ。。。 戻り値: Int 11 <ソース> BEGIN DECLARE pline INTEGER(11) DEFAULT NULL; SELECT COUNT(1) INTO pline FROM `hoge` WHERE `SHOP` = shop; IF pline IS NULL THEN SET pline = 10000; END IF; RETURN pline; END 上記のように、作成したストアドファンクションですが、 どんな引数を入れても、戻り値が全ての行(817行)になってしまいます。 以下を参照。 Where区がまったく働いていないのですが、何が原因なのでしょうか。 教えてください。 <ストアドファンクション実行> mysql> select fgetLineNew(1); +----------------+ | fgetLineNew(1) | +----------------+ | 817 | +----------------+ 1 row in set (0.01 sec) mysql> select fgetLineNew(525); +------------------+ | fgetLineNew(525) | +------------------+ | 817 | +------------------+ 1 row in set (0.01 sec) mysql> select fgetLineNew(101); +------------------+ | fgetLineNew(101) | +------------------+ | 817 | +------------------+ 1 row in set (0.00 sec) mysql> select fgetLineNew(525); +------------------+ | fgetLineNew(525) | +------------------+ | 817 | +------------------+ 1 row in set (0.00 sec) mysql> select fgetLineNew('525'); +--------------------+ | fgetLineNew('525') | +--------------------+ | 817 | +--------------------+ 1 row in set (0.01 sec)

    • ベストアンサー
    • MySQL