簡體   English   中英

如何從 C# 中的用戶觸發器表中獲取 trigger_body

[英]How do I get the trigger_body from the user-triggers table in C#

背景:我實際上是在嘗試從 C# 程序中識別 Oracle 表中的自動增量列。 我已經發現在 Oracle 中自動增量是使用序列和觸發器完成的,並且已經使用 SQL Developer 識別了示例數據庫中的序列和觸發器。

因此,下一步,獲取觸發器:我可以通過查詢來實現這一點 - “從 USER_TRIGGERS 中選擇 *”。 沒問題。 甚至還有一個 TABLE_NAME 字段來檢查我想要檢查的表。 (還有一個可能有用的 COLUMN_NAME 列,但它似乎總是空的)。

現在似乎別無選擇,只能解析 TRIGGER_BODY 字段 - 但有問題。 SQL Developer 顯示在 TRIGGER_BODY 中有一個看起來很有意義的字符串,但在我的從查詢返回的 DataTable 中,TRIGGER_BODY 字段始終為空。

我在網上搜索過,似乎 TRIGGER_BODY 實際上是一個 LONG,盡管 C# 說該列是字符串類型,所以我不明白。 到目前為止,我發現的唯一建議是使用 TO_LOB()(或可能是 TO_CLOB())函數以某種方式轉換字段的內容,但這只會引發“不一致的數據類型”異常。

我使用 C# 4.5 和 Oracle.DataAccess 作為數據訪問對象。 Oracle 的版本是 11g。

任何建議將不勝感激。

dba_|all_|user_triggers觸發器的所有者和名稱后,最簡單的選擇通常是使用dbms_metadata包生成 DDL 以創建觸發器。 這將是您的前端應該能夠使用的CLOB

DBMS_METADATA.GET_DDL('TRIGGER', <<name of trigger>>, <<owner of trigger>> )

不幸的是,Oracle 中的LONG數據類型是一種非常短暫的死胡同數據類型。 它在 Oracle 7 days if memory services 中被引入,並被 8.1.5 棄用,轉而使用CLOBBLOB表示已棄用的LONG RAW )。 Oracle 一直建議人們在大約 20 年內不要使用該數據類型。 使用這種數據類型有很多限制。 大多數情況下,它只存在於非常舊的遺留應用程序和添加它的數據字典表中,因為 Oracle 希望確保這些視圖的向后兼容性。 今天的大多數前端工具都沒有內置對LONG數據類型的支持,因為在 OCI 層,它涉及跳過相當多的環節,您只需跳過這些環節即可使用LONG

暫無
暫無

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

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