このプロ*Cパターンは一種のベストプラクティスですか、それとも文書化されていますか?

StackOverflow https://stackoverflow.com/questions/9355887

  •  28-10-2019
  •  | 
  •  

質問

以下の種類のコンストラクトを使用して、いくつかのレガシープロ*Cコードがあります。
この種のパターンは、オンラインフォーラムにありますが、Oracleドキュメントには何もありません。
特に、 GoogleはOracleのWebサイトで「SQHSTS」に関するドキュメントを見つけることができません.

このパターンはどこかに文書化されていますか?
それは良いプログラミングの練習と考えられていますか?

/* 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;

(からコピーされたコード ここ しかし、私のものに似ています)

役に立ちましたか?

解決

pro*cは、次のようなステートメントから低レベルcを作成します

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

宣言する各データ項目のOCIのような記述子を作成します。他のステートメント(EXEC SQL ...;)これらのバインドされた変数を使用してSQLを埋め込んだ場合、宣言セクションでエンコードされたものを使用して、より低いレベルのコールに変換されます。 pro*cは古いです。私は25年以上前にPro*Cの最初のベータ版に取り組みました。 ...お勧めしません。

Pro*c Pre-compilationによって生成されたコードは、最新のコンパイラによってコンパイルされた場合、警告が有効になっている場合、必ずしも完全に行われるとは限りません。また、読みやすいものではありません。 OCIプログラミングを学びたい場合は、何が起こっているかを入手できます。特別なタスクを実行したくない限り、実際にはお勧めしません。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top