質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

11175閲覧

ORACLE PLS-00306: 'FUNCTION名'の呼出しで、引数の数または型が正しくありません。

wg-system

総合スコア13

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2021/11/22 04:33

VisualStudio2019 C#(WPF)のソースからORACLEパッケージ内のファンクションを呼び出したいのですが、
表題のエラーが発生してしまいます。
引数の数と型については合っていると考えておりますので
原因がわからず困っております。


■ファンクションの定義

create or replace package body TEST_PACKAGE as

function TEST_FUNC(p1 IN CHAR, p2 IN CHAR, p3 IN NUMBER, p4 IN NUMBER, p5 IN NUMBER) return NUMBER

■C#からの実行箇所
decimal result = 0; // 結果受取用

command.Connection = conn;

//コマンドタイプに「ストアド」を設定
command.CommandType = CommandType.StoredProcedure;

//ストアド名を設定
command.CommandText = @"TEST_PACKAGE.TEST_FUNC";

command.Parameters.Add("p1", OracleDbType.Char, "000", ParameterDirection.Input);
command.Parameters.Add("p2", OracleDbType.Char, "20211101", ParameterDirection.Input);
command.Parameters.Add("p3", OracleDbType.Decimal, 2021, ParameterDirection.Input);
command.Parameters.Add("p4", OracleDbType.Decimal, 11, ParameterDirection.Input);
command.Parameters.Add("p5", OracleDbType.Decimal, 1, ParameterDirection.Input);

command.Parameters.Add("p6", OracleDbType.Decimal, result, ParameterDirection.Output);

//ストアドを実行する
command.ExecuteNonQuery();

■例外メッセージ
ORA-06550: 行1、列7:
PLS-00306: 'TEST_FUNC'の呼出しで、引数の数または型が正しくありません。
ORA-06550: 行1、列7:
PL/SQL: Statement ignored


どうかご指導の程宜しくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ParameterDirection.OutputはOUTパラメータを受け取る場合で、
戻り値なら、ParameterDirection.ReturnValue じゃないでしょうか。
ADO.NET - ストアド プロシージャでのデータの変更

また、リンク先に注意事項が記載してありますが、

注意
OleDbDataAdapter を使用するときは、ReturnValue の ParameterDirection を含むパラメーターを、他のパラメーターより先に指定する必要があります。

これは、Oracleの場合でも多分同じだと思います。

投稿2021/11/22 05:12

編集2021/11/22 06:26
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wg-system

2021/11/22 23:44

ご指摘の通り command.Parameters.Add("p6", OracleDbType.Decimal, result, ParameterDirection.ReturnValue); に変更して一つ目のパラメータとしてセットしてあげるとエラーなく正常な結果を取得することができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問