<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 33.5\. 動態SQL 在許多情況下,應用要執行的具體的SQL語句在書寫應用的時候就已經知道了。 不過,在某些情況下,SQL語句是在運行時或者由外部的數據提供的。 在這種情況下,我們不能直接在C代碼嵌入SQL語句, 但是有個機制可以允許你調用放在一個字串變量里的任何SQL語句。 ## 33.5.1\. 執行沒有結果集的語句 執行任意SQL語句最簡單的方法是使用`EXECUTE IMMEDIATE`命令。 比如: ``` EXEC SQL BEGIN DECLARE SECTION; const char *stmt = "CREATE TABLE test1 (...);"; EXEC SQL END DECLARE SECTION; EXEC SQL EXECUTE IMMEDIATE :stmt; ``` `EXECUTE IMMEDIATE`可以用于不返回結果集 (比如,DDL, `INSERT`, `UPDATE`, `DELETE`)的SQL語句。 你不能用這種方式執行檢索數據(比如`SELECT`)的語句。 下一節將描述該如何做。 ## 33.5.2\. 執行具有輸入參數的語句 執行任意SQL語句的更強大的方法是準備這些語句一次, 并且執行這些準備好的語句任意多次。 我們也可以準備一個普遍的語句版本,然后通過替換一些參數, 執行一個特定的版本。在準備語句的時候, 在你稍后需要替換參數的地方書寫一個問號。比如: ``` EXEC SQL BEGIN DECLARE SECTION; const char *stmt = "INSERT INTO test1 VALUES(?, ?);"; EXEC SQL END DECLARE SECTION; EXEC SQL PREPARE mystmt FROM :stmt; ... EXEC SQL EXECUTE mystmt USING 42, 'foobar'; ``` 當你不再需要預備語句時,你應該釋放它: ``` EXEC SQL DEALLOCATE PREPARE _name_; ``` ## 33.5.3\. 執行帶有結果集的語句 為了執行具有單獨結果集的SQL語句,可以使用`EXECUTE`。 為了保存結果,增加`INTO`子句。 ``` EXEC SQL BEGIN DECLARE SECTION; const char *stmt = "SELECT a, b, c FROM test1 WHERE a > ?"; int v1, v2; VARCHAR v3[50]; EXEC SQL END DECLARE SECTION; EXEC SQL PREPARE mystmt FROM :stmt; ... EXEC SQL EXECUTE mystmt INTO :v1, :v2, :v3 USING 37; ``` 一個`EXECUTE`命令可以有一個`INTO`子句, 一個`USING`子句,也可以兩個都有或者兩個都沒有。 如果查詢希望返回多個結果行,那么使用游標,正如下面例子。 參閱[Section 33.3.2](#calibre_link-1994)獲取更多關于游標的信息。 ``` EXEC SQL BEGIN DECLARE SECTION; char dbaname[128]; char datname[128]; char *stmt = "SELECT u.usename as dbaname, d.datname " " FROM pg_database d, pg_user u " " WHERE d.datdba = u.usesysid"; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT TO testdb AS con1 USER testuser; EXEC SQL PREPARE stmt1 FROM :stmt; EXEC SQL DECLARE cursor1 CURSOR FOR stmt1; EXEC SQL OPEN cursor1; EXEC SQL WHENEVER NOT FOUND DO BREAK; while (1) { EXEC SQL FETCH cursor1 INTO :dbaname,:datname; printf("dbaname=%s, datname=%s\n", dbaname, datname); } EXEC SQL CLOSE cursor1; EXEC SQL COMMIT; EXEC SQL DISCONNECT ALL; ```
                  <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>

                              哎呀哎呀视频在线观看