2012-02-20 39 views
0

以下のような種類の構文を使用して、いくつかの旧式のPro * Cコードがあります。
この種のパターンは、オンライン・フォーラムでは見つかりますが、Oracleのマニュアルには記載されていません。
特に、Google can't find any doc about "sqhsts" on the Oracle websiteこのPro * Cパターンは一種のベストプラクティスですか、それとも文書化されていますか?

このパターンはどこかに書かれていますか?
これは良いプログラミング方法と考えられますか?

/* cud (compilation unit data) array */ 
static const short sqlcud0[] = 
{10,4130,832,0,0, 
5,0,0,1,0,0,27,23,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,97,0,0,1,10,0,0, 
36,0,0,2,30,0,4,25,0,0,1,0,0,1,0,2,97,0,0, 
}; 

/* EXEC SQL CONNECT :user IDENTIFIED BY :pwd USING :url; */ 

{ 
struct sqlexd sqlstm; 
sqlstm.sqlvsn = 10; 
sqlstm.arrsiz = 4; 
sqlstm.sqladtp = &sqladt; 
sqlstm.sqltdsp = &sqltds; 
sqlstm.iters = (unsigned int)10; 
sqlstm.offset = (unsigned int)5; 
sqlstm.cud = sqlcud0; 
sqlstm.sqlest = (unsigned char *)&sqlca; 
sqlstm.sqlety = (unsigned short)256; 
sqlstm.occurs = (unsigned int)0; 
sqlstm.sqhstv[0] = (void *)user; 
sqlstm.sqhstl[0] = (unsigned int)0; 
sqlstm.sqhsts[0] = (int)0; 
sqlstm.sqindv[0] = (void *)0; 
sqlstm.sqinds[0] = (int)0; 
sqlstm.sqharm[0] = (unsigned int)0; 
sqlstm.sqadto[0] = (unsigned short)0; 
sqlstm.sqtdso[0] = (unsigned short)0; 
sqlstm.sqhstv[1] = (void *)pwd; 
sqlstm.sqhstl[1] = (unsigned int)0; 
sqlstm.sqhsts[1] = (int)0; 
sqlstm.sqindv[1] = (void *)0; 
sqlstm.sqinds[1] = (int)0; 
sqlstm.sqharm[1] = (unsigned int)0; 
sqlstm.sqadto[1] = (unsigned short)0; 
sqlstm.sqtdso[1] = (unsigned short)0; 
sqlstm.sqhstv[2] = (void *)url; 

(コードhereからコピーされたが、鉱山に類似)

+0

どのような構成になっていますか? –

+2

私はこれが生成されたコードではなく、オリジナルのプロ*ソースだと思います。生成されたコードを気にする必要はありません。 –

+0

@Seth:私はsqlcud0を参照し、sqlstmを充填しています。私は両方とも接続されており、常に一緒に使用されると思います。 –

答えて

5

のPro * Cは、あなたが宣言し、各データ項目のOCIのような記述子を作成します

EXEC SQL BEGIN DECLARE SECTION; 
EXEC SQL END DECLARE SECTION; 

のような文から低レベルのCを作成し、 。これらのバインドされた変数をsqlに埋め込む他のステートメント(EXEC SQL ...;)は、宣言セクションでエンコードされたものを使用して、より低いレベルの一連の呼び出しに変換されます。 Pro * Cは古いです。私は25年以上前のPro * Cの最初のベータ版に取り組んでいました。 ...推奨されていません。

最新のコンパイラで警告を有効にしてコンパイルすると、Pro * Cのプリコンパイルによって生成されたコードが完全に完全になるとは限りません。それはまた、読めるように意図されていません。 OCIプログラミングを学びたいなら、何が起こっているのかを知ることができます。いくつかの特別な仕事をしたいのでなければ、実際にはお勧めしません。

タスク例:OCIは、Oracleの外部C/C++ライブラリを作成するために使用します。これは、あなたが細かい穀粒レベルで、オラクルでやりたいと思うほとんどのものを扱うことを可能にします。ここから始めてください:

http://www.oracle.com/technetwork/database/features/oci/index.html

関連する問題