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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 33.3\. 運行SQL命令 在嵌入的SQL應用中可以運行任何SQL命令。下面是一些如何使用它們的例子。 ## 33.3.1\. 執行SQL語句 創建一個表: ``` EXEC SQL CREATE TABLE foo (number integer, ascii char(16)); EXEC SQL CREATE UNIQUE INDEX num1 ON foo(number); EXEC SQL COMMIT; ``` 插入一行: ``` EXEC SQL INSERT INTO foo (number, ascii) VALUES (9999, 'doodad'); EXEC SQL COMMIT; ``` 刪除一行: ``` EXEC SQL DELETE FROM foo WHERE number = 9999; EXEC SQL COMMIT; ``` 更新: ``` EXEC SQL UPDATE foo SET ascii = 'foobar' WHERE number = 9999; EXEC SQL COMMIT; ``` 可以通過`EXEC SQL`直接執行返回一個結果行的`SELECT` 語句。為了處理多行結果集,應用程序必須使用游標; 參閱[Section 33.3.2](#calibre_link-1994)。(特殊情況下,應用程序可以一次讀取多行到數組宿主變量中; 參閱[Section 33.4.4.3.1](#calibre_link-1995)。) 單行select: ``` EXEC SQL SELECT foo INTO :FooBar FROM table1 WHERE ascii = 'doodad'; ``` 同時,可以使用`SHOW`命令檢索配置參數: ``` EXEC SQL SHOW search_path INTO :var; ``` 形如`:``_something_` 這樣的記號是_宿主變量_,也就是說,他們指向C程序中的變量。 在[Section 33.4](#calibre_link-1993)中有解釋。 ## 33.3.2\. 使用游標 為了檢索出多行的結果集,應用程序必須聲明一個游標并且從游標中抓取每一行。 使用游標的步驟如下:聲明一個游標,打開它,從游標中抓取一行,重復,最后關閉它。 使用游標選擇: ``` EXEC SQL DECLARE foo_bar CURSOR FOR SELECT number, ascii FROM foo ORDER BY ascii; EXEC SQL OPEN foo_bar; EXEC SQL FETCH foo_bar INTO :FooBar, DooDad; ... EXEC SQL CLOSE foo_bar; EXEC SQL COMMIT; ``` 關于游標聲明的更多細節,請參閱[DECLARE](#calibre_link-25),關于 `FETCH`命令的細節請參閱[FETCH](#calibre_link-74)。 > **Note:** ECPG `DECLARE`命令實際上不會造成語句被發送到PostgreSQL后端。 當執行`OPEN`命令時, 在后端(使用后端的`DECLARE`命令)打開游標。 ## 33.3.3\. 管理事務 在缺省模式下,語句只有在`EXEC SQL COMMIT` 發出的時候才提交, 嵌入的SQL接口也支持事務的自動提交(類似libpq的行為), 方法是通過給`ecpg`(見[ecpg](#calibre_link-62)) 增加命令行選項`-t`, 或者是通過`EXEC SQL SET AUTOCOMMIT TO ON`語句。 在自動提交模式里,每條命令都是自動提交的, 除非它們包圍在一個明確的事務塊里。 這個模式可以用`EXEC SQL SET AUTOCOMMIT TO OFF`明確地關閉。 有以下事務管理命令可用: `EXEC SQL COMMIT` 提交正在進行的事務。 `EXEC SQL ROLLBACK` 回滾正在進行的事務。 `EXEC SQL SET AUTOCOMMIT TO ON` 啟動自動提交模式。 `SET AUTOCOMMIT TO OFF` 禁用自動提交模式。這是缺省的。 ## 33.3.4\. 預備語句 當編譯時間不知道該值已被傳遞給SQL語句,或者同一語句將使用多次, 那么預備語句是有幫助的。 使用命令`PREPARE`準備語句。對于不知道的值, 使用占位符"`?`": ``` EXEC SQL PREPARE stmt1 FROM "SELECT oid, datname FROM pg_database WHERE oid = ?"; ``` 如果一個語句返回單行,應用程序可以在`PREPARE` 執行語句之后調用`EXECUTE`, 使用`USING`子句為占位符提供實際值: ``` EXEC SQL EXECUTE stmt1 INTO :dboid, :dbname USING 1; ``` 如果一個語句返回多行,應用程序可以使用基于預備語句聲明的游標。 為了結合輸入參數,必須使用`USING`子句打開游標: ``` EXEC SQL PREPARE stmt1 FROM "SELECT oid,datname FROM pg_database WHERE oid > ?"; EXEC SQL DECLARE foo_bar CURSOR FOR stmt1; /* 當結果集達到最后時,打破while循環 */ EXEC SQL WHENEVER NOT FOUND DO BREAK; EXEC SQL OPEN foo_bar USING 100; ... while (1) { EXEC SQL FETCH NEXT FROM foo_bar INTO :dboid, :dbname; ... } EXEC SQL CLOSE foo_bar; ``` 當你不再需要預備語句的時候,你應該重新分配它: ``` EXEC SQL DEALLOCATE PREPARE _name_; ``` 為獲得關于`PREPARE`的更多詳情, 請參閱[PREPARE](#calibre_link-1996)。同時參閱[Section 33.5](#calibre_link-1997) 獲得關于占位符和輸入參數的更多詳情。
                  <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>

                              哎呀哎呀视频在线观看