1

編集

問題解決: PL/SQL プロシージャーのある時点で誤って DBMS 出力を有効にする行を削除したため、PHP に何も送信できませんでした。SQL開発者でテストするときは、ネットワークに接続する必要があり、これを行うために使用するコードでDBMS出力を有効にする必要があるため、PHPではなくSQL_Developerで機能しました。

誤ってコード行を削除してしまったというのは、とてもばかげていると思います。

誰かが似たようなものを持っている場合に備えて、以下にクエリを残します


これがうまくいかない理由を突き止めようとして、頭をテーブルにぶつけました。

これは、PHP を使用して Oracle データベースに接続し、SQL_Developer でコードを作成しています。

開始ノードと終了ノードとして 2 つの整数を取り、いくつかの指示を吐き出す PL/SQL プロシージャを作成しました。これは、SQL_Developer と PHP でうまく機能しました。PHP の select ステートメントはこれで、必要なものが返されました。

$get_instruc = "Select * FROM TABLE(Navi_Instructions.Get_Navi_Instructions(:start_node,:end_node))";

(整数は oci_bind_by_name を使用してバインドされます)。

整数を文字列にする必要があるため、これに対応するために PL/SQL プロシージャを書き直しました。私の新しい手順は完全に機能し、SQL_Developer で次の選択ステートメントを使用すると、正しいデータが取得されます

Select * FROM TABLE(Navi_Instructions_Final.Get_Navi_Instructions_Final('Room_101','Room_120'));

私の次のステップは、単純にこの select ステートメントを PHP に入れることでしたが、PHP の select ステートメントは値を返すことを拒否しました。「0行が選択されました」というメッセージが表示されます。

$get_instruc = "Select * FROM TABLE(Navi_Instructions_Final.Get_Navi_Instructions_Final(:start_node_final,:end_node_final))";

(文字列は oci_bind_by_name を使用してバインドされます)。

それがどのように機能しないのか、私は本当に理解していません.selectステートメントはSQL_Developerで機能するため、PL/SQLプロシージャまたはステートメントではありません。値には最初にスペースがありましたが、それをアンダースコアに置き換えましたが、それは役に立ちませんでした。文字列の前後に ' ' と " " を使用しました。バインディングを削除して、次のようなプレーンな文字列を使用しようとしました

$get_instruc = "Select * FROM TABLE(Navi_Instructions_Final.Get_Navi_Instructions_Final('Room_101','Room_120'))"

OracleがPHPを介して文字列/varcharを受信できないなどの基本的なものが欠けていますか?? どんな助けでも大歓迎です。

4

0 に答える 0