• 締切済み

Pro*Cでの埋め込みSQLの最大長

Pro*Cでの埋め込みSQLの最大長を 教えて頂けないでしょうか。 現在は、4096Byteを最大として開発を 行っています。 問題として、外部ファイルより検索条件を 読込んでSQLの生成を行っておりますが、 埋め込みSQLの最大長が不明のため、何バイト で制限をかけて良いかの判断ができず、 困っております。

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

みんなの回答

回答No.1

Pro*Cによる埋め込みSQLは、最大64KまでOKです。

関連するQ&A

  • Pro*Cでのfor update

    こんばんは。 質問させてください。 Oracle9 Pro*Cで開発しておりますが、SQL文の中で select ・・・for update (イ) と書いた場合、そのプログラムを抜けるときとかに あえてcommitとかrollbackとかしなくても 問題なく動くっぽいんですけど そういうものですか? 問題なく動くというのは (イ)のあとにsleep入れて、SQL*Plusで(イ)で選択されるデータにupdateをかけると プログラムが終わるまで待ってて、終わったらSQL*Plusのupdateが正常に行われる。ということです。 初歩的な質問ですみません。 ついでにもう一つ。 Pro*Cのオススメな本とか、あったら教えてください。 本が何もなく、人のソースとか参考にしながら感覚でここ半年やってきましたが やっぱり本が欲しい。。と思うようになりました。 二つも質問してすみませんが、よろしくお願いします。

  • Pro*CでVARCHAR2項目の検索

    こんにちは。たぶんとても基礎的なことと思うのですが。。。 Pro*CでSELECTするとき、WHERE句の中でVARCHAR2項目を条件に入れています。 が、どうも検索がうまくできなくて質問しました。 ホスト変数の定義…  char VVV[5]; 検索するところ… select xxx into :yyy from ZZZ where ZZZ.varchar2no4BYTE = :VVV ; のような感じです。ZZZ.varchar2no4BYTEの型はVARCHAR2(4)です。 で、ZZZ.varchar2no4BYTE が"1234"と"12"の2つのレコードを 登録しておいて、VVVに"1234"を入れると、ちゃんと検索できました。 んが、VVVに"12"を入れても検索されません。 そんなのあり?と VVVに"12 "を入れてもだめ、 VVVをVARCHAR構造体?にして、"12"で長さ2にしてもだめ、 だけどZZZ.varchar2no4BYTEがCHAR(4)だと"12"でOK、 なんなんだとPro*Cのマニュアル見てもNUMBER型の検索例ばかり、 というところで力尽きました。 (あー、CHAR_MAP=STRING って関係あるですかね) 動的SQLにすればよいのかもしれませんが、事情で使えないのです。 それ以前にホスト変数の理解が間違っているのではないかと思い、 お聞きするしだいです。

  • pro*c で pl/sql に変数を渡すとora-01458発生

    oracle初心者です。よろしくお願いします。 oracleのバージョンは 10.1.0.2.0 開発言語はpro*c pl/sql です。 テキストファイルを処理するAPを作成しています。 ディレクトリオブジェクト名を、pro*cからpl/sqlを呼び出す際に変数として渡していますが、実行するとora-01458エラーが発生してしまいます。 pro*cのコーディングは以下の通りです。 EXEC SQL BEGIN DECLARE SECTION; char Pass[50+1]; char Txtnm[20+1]; int nStatus; VARCHAR vErrMsg[100+1]; VARCHAR vErrCode[10+1]; EXEC SQL END DECLARE SECTION; ZeroMemory( Pass, sizeof( Pass ) ); strcpy( Pass, "DIR_A" ); ZeroMemory( Txtnm, sizeof( Txtnm) ); strcpy( Txtnm, "TEST.txt" ); EXEC SQL EXECUTE BEGIN  proc9999( :Pass, :Txtnm, :nStatus, :vErrMsg, :vErrCode ); END; END-EXEC; しかし、このpl/sqlをsqlplusから下記の内容で実行すると正常に動作します。 DECLARE in_file_dir VARCHAR2(255) :='DIR_A'; in_file_name VARCHAR2(255) :='TEST.txt'; io_sts number; io_msg VARCHAR2(255); io_msgcd VARCHAR2(10); BEGIN PROC9999( in_file_dir, in_file_name, io_sts, io_msg, io_msgcd ); END; 同じことをしていると思うのですが何故pro*cではエラーになるのでしょうか?

  • SQL server 2005に接続可能な環境は?

    SQL server 2005に接続可能な環境は、どのようなものがあるでしょうか? SQL server 2005に接続する検索システムをC#2005で構築しました。 C#の他にどのような開発環境、開発言語でSQL server2005に接続可能でしょうか? PHPは、接続可能なようなことをWEBで見ました。 今はやりのAndroid端末やiPod,iPadからSQL serverに接続可能でしょうか? もし、可能ならば開発環境、開発言語を教えていただければ幸いです。

  • C言語 埋め込みSQL ecpg

    C言語の埋め込みSQLで質問です。 ご教示ください。初心者です。 【環境】 Windows7 64bit gcc:5.3.0 PostgreSQL:9.6.1 【pgcファイル】 #include <stdio.h> exec sql include sqlca; int main(char* argx[], char* argv[]){ exec sql begin declare section; char NAME[256]; char MAIL[256]; exec sql end declare section; exec sql connect to bookmark user dbuser; strcpy(NAME,argv[1]); strcpy(MAIL,argv[2]); exec sql insert into Name_list (name, mail) values (:NAME, :MAIL); exec sql commit; exec sql disconnect; return 0; } 【症状】 以下のコマンドを実行するとエラーが出ます。 -Iでインクルードしようとしています。 C:\cTest\c>ecpg name_list_db.pgc -I C:\postgresql\include ecpg: ファイル"-I"をオープンできませんでした: No such file or directory ecpg: ファイル"C:\postgresql\include"をオープンできませんでした: No such file or directory 一応Cファイルは生成されます。 強引にgccすると下記のエラーが出ます C:\cTest\c>gcc -o name_list_db name_list_db.c -I C:\postgresql\include -lecpg c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -lecpg collect2.exe: error: ld returned 1 exit status どうすれば良いかご教示ください。 この辺のWebサイトを参考にしました。 http://se.cite.ehime-u.ac.jp/~aman/memo/SQL/ecpg.html 以上よろしくお願いいたします。

  • VBからCrystalReportsへSQL文を渡すには?

     VBからCrystalReportを呼び出し、CrystalReports側でSQL文実行させたいのですが、ヘルプ等を見ても方法がわかりません。  例えば・・・ 1 VBで入力画面を用意し、抽出条件を入れさせる。 2 入力された条件にてSQL文を生成しSQL-Serverから該当行を抽出する。 3 CrystalReportsで作表する。  VBでSQL文を生成し、例えばMDBに書き出し、それを単純にCrystalReportsで読むということは出来たのですが、中間ファイル(この場合はMDB)を作らずに同様のことができるのでしょうか?  つまり、VBから制御されたCrystalReportsでDBから条件抽出をかけつつ作表するということが可能か否か、可能であるならばその方法をご教授いただけると幸いです。

  • Pro*CでのINSERT文

    こんにちわ。 Pro*CでのINSERT文について質問させてください。 例えば、CUSTOMERSというテーブルを作り、メンバーをC_ID, CNAME, ADDRESSとしたときに、INSERT文を使用しまして、 新規のお客さんのデータをいれようと考えています。そのとき、C_IDの値をすでに入れてあるC_IDの最大値+1として、格納したいのですが、どうも旨くいかずに行き詰っています。MAX(C_ID)を使用することは分かっているのですが、INSERTとの組み合わせ方がわからず、困っています。 どなたかうまいやりかた(SQL文)があれば教えていただけないでしょうか? もちろん、C言語で書きましたプログラム内に組み込みたいと考えています。 OSはUNIX(SUN)、DBはORACLE9を使用しています。 どうかよろしくお願いいたします。

  • Pro*Cの大文字小文字

    こんにちは。 現在Oracle9 Pro*Cで開発をしているのですが、下記のSQLが変です。 どう変かというと・・・ (1)EXEC SQL SELECT ABC FROM DB1 WHERE A_NUM = '1'; (2)EXEC SQL SELECT abc FROM DB1 WHERE A_NUM = '1'; (3)EXEC SQL SELECT Abc FROM DB1 WHERE A_NUM = '1'; 元々(1)のように記述してありました。 それがある日突然データがあるのにNotFoundになって、ためしに項目名ABCをabcに変えたところ、なぜだかselectできるようになりました。 しかし(2)も今日突然データがあるのにNotFoundになり、(3)のようにAbcにかえたところ、selectできるようになりました。 大文字小文字は関係ないと誰に聞いても言われるのですが、実際今は(3)でないと同じデータでもselectできません。 今はこれでいいですが、この調子で行くときっといつか(3)でもselectできなくなり、aBcとかにしなくてはいけない日が来ると思うのです。 なんででしょう? 環境の問題とかでしょうか? 何か分かる方がいたら、よろしくお願いします。

  • SQL2000からSQL2005へのレプリケーション

    日々更新されるSQL2000(サーバー2000)上のテーブルA、テーブルB、テーブルCをSQL2005(サーバー2005)上で参照するために、レプリケーションの機能を使って、SQL2000をパブリッシュとしてSQL2005上をサブスクライバとしてプルサブスクリプション(スケジュール実行)でSQL2005上にテーブルA、テーブルB、テーブルCを生成させたいと考えております。 SQL2000側でパブリッシュの設定、2005側からプルサブスクリプションの設定ともに問題無く設定できたのですが、いざ実施すると 下記のエラーが出て実行できませんでした。 お聞きしたい点としてはそもそも上記の方法でのSQL2000から2005へ テーブルコピーが可能なのか? 無理な場合は、他にどの様な方法でスケジュールで任意のテーブルを 2000から2005へコピーするあるか教えていただけますでしょうか? ------------ ユーザー 'HOGEDOMAIN\サーバー2000$' はログインできませんでした。 (ソース: MSSQLServer, エラー番号: 18456) ヘルプの表示: http://help/18456

  • 【再投稿】Pro*Cの大文字小文字

    こんにちは。 現在Oracle9 Pro*Cで開発をしているのですが、下記のSQLが変です。 どう変かというと・・・ (1)EXEC SQL SELECT ABC FROM DB1 WHERE A_NUM = \'1\'; (2)EXEC SQL SELECT abc FROM DB1 WHERE A_NUM = \'1\'; (3)EXEC SQL SELECT Abc FROM DB1 WHERE A_NUM = \'1\'; 元々(1)のように記述してありました。 それがある日突然データがあるのにNotFoundになって、ためしに項目名ABCをabcに変えたところ、なぜだかselectできるようになりました。 しかし(2)も今日突然データがあるのにNotFoundになり、(3)のようにAbcにかえたところ、selectできるようになりました。 大文字小文字は関係ないと誰に聞いても言われるのですが、実際今は(3)でないと同じデータでもselectできません。 今はこれでいいですが、この調子で行くときっといつか(3)でもselectできなくなり、aBcとかにしなくてはいけない日が来ると思うのです。 なんででしょう? 環境の問題とかでしょうか? 何か分かる方がいたら、よろしくお願いします。