簡體   English   中英

我們可以在Netezza存儲過程中實現自主交易嗎

[英]can we implement autonomous transaction in Netezza Stored procedure

Netezza在SP中只有一次提交,否則會回滾。 因此,如果Netezza SP失敗,則控制轉到Exception塊,在這種情況下,有人知道我是否將插入插入錯誤表或調用另一個SP時,即使主塊中的事務已滾動,異常中的該事務也會被提交。背部? 換句話說,我們可以在Netezza中實現自主交易嗎?

簡而言之,沒有。
Netezza(v7.x和更早版本)不支持子事務,這對於工作是必需的。 更糟的是,使用NZPLSQL的唯一方法是將其包裝在存儲過程中(它不支持匿名nzplsql塊)

但是,這僅適用於自定義異常處理。 使用IF或CASE分支可以正常工作。
我認為,與Oracle相比,這種權衡是主要的區別之一。 解決此問題的一種方法是將異常處理邏輯放在外部腳本或應用程序中。

文檔中對此沒有太多強調,但是到處都有提示和腳注:

在BEGIN / COMMIT事務塊中禁止使用某些SQL命令。 例如:
開始
[創建| DROP]數據庫
(+其他一些DDL命令,例如ALTER TABLE,...)

Netezza存儲過程的正文中也禁止使用這些SQL命令。 如果在事務塊或存儲過程中使用這些命令之一,則系統將顯示錯誤

  • 從NZPLSQL的文檔中:

    本節介紹NZPLSQL語言,其結構以及如何使用該語言創建存儲過程。

  • 從存儲過程的文檔中:

    重要提示:請注意不要將BEGIN / END用於NZPLSQL中的語句分組與用於事務控制的BEGIN / END SQL數據庫命令混淆。 NZPLSQL BEGIN / END關鍵字僅用於分組。 他們不開始或結束交易。 過程始終在外部查詢建立的事務中運行; 它們無法啟動或提交事務,因為IBM®Netezza®SQL沒有嵌套的事務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM