<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 33.16\. 內部 這一節解釋ECPG在內部是如何運轉的。 這些信息有時候可以幫助用戶理解如何使用ECPG。 `ecpg`寫到輸出里的頭四行是固定的行。兩行是注釋, 另外兩行是與庫接口的必要行。 然后預處理器讀取文件并且寫輸出流。 通常它只是把所有東西都回顯到輸出中去。 如果它看到一個`EXEC SQL`語句, 它就變換并且修改它。命令以`EXEC SQL`開頭,以`;`結尾。 所有在中間的東西都被當 作一個SQL語句并且進行變量代換的解析。 如果一個符號以一個冒號(`:`)開頭,則發生變量代換。 在`EXEC SQL DECLARE`段里預先聲明的變量中找出該名字的變量。 庫里面最重要的函數是`ECPGdo`,它負責執行大多數命令。 它接受變量的參數個數。 這些參數的個數可能很容易達到50個或者更多, 我們希望在任何平臺上這都不是問題。 參數是: 行號 這是原始行的行號;只是在錯誤信息中使用。 字符串 這是要發出的SQL命令。 它被輸入變量修改,也就是說,在編譯時未知的, 但是需要輸入到命令中的變量。 此處變量應該包含字符串`?`。 輸入變量 每個輸入變量都導致十個參數的生成。(見下文) `ECPGt_EOIT` 一個`enum`告訴沒有更多輸入變量了。 輸出變量 每個輸出變量導致十個參數的創建。(見下文) 這些變量被這些函數填充。 `ECPGt_EORT` 一個指出沒有更多變量的`enum`。 對于每個屬于SQL命令一部分的變量, 函數可以得到十個參數: 1. 作為特殊符號的類型。 2. 一個指向其數值的指針,或者一個指向指針的指針。 3. 如果變量大小是`char`或者`varchar`。 4. 數組中元素的個數(用于抓取數組)。 5. 指向數組中下一個元素的偏移量(用于抓取數組)。 6. 作為一種特殊符號的指示器變量的類型。 7. 一個指向指示器變量的指針。 8. 0 9. 指示器數組中的元素個數(用于抓取數組)。 10. 指向指示器數組的下一個元素的偏移量(用于抓取數組)。 請注意,不是所有SQL命令都這么被對待。 比如,一個像下面這樣的打開游標的語句。 ``` EXEC SQL OPEN _cursor_; ``` 不會被拷貝到輸出中。 而是在`OPEN`命令的位置使用游標的`DECLARE`命令, 因為它同樣也打開游標。 下面是一個完整的例子,描述了文件`foo.pgc` 的預處理后的輸出(細節可能隨著每個不同的預處理器版本而變化): ``` EXEC SQL BEGIN DECLARE SECTION; int index; int result; EXEC SQL END DECLARE SECTION; ... EXEC SQL SELECT res INTO :result FROM mytable WHERE index = :index; ``` 被翻譯成: ``` /* 通過ecpg (2.6.0)處理,通過預處理器添加2個include文件*/ #include <ecpgtype.h>; #include <ecpglib.h>; /* exec sql開始聲明段 */ #line 1 "foo.pgc" int index; int result; /* exec sql結束聲明段 */ ... ECPGdo(__LINE__, NULL, "SELECT res FROM mytable WHERE index = ? ", ECPGt_int,&(index),1L,1L,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_int,&(result),1L,1L,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); #line 147 "foo.pgc" ``` (這里的凹進是為了增強可讀性加的,可不是預處理器能干的事情。)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看