簡體   English   中英

無法在SQL查詢APEX ORACLE中將綁定變量用作表名

[英]Can't use bind variable as table name in sql query APEX ORACLE

SELECT * FROM :TABLENAME 

是我的查詢,而Apex不允許我運行,因為該應用程序不知道表名。 如何使用變量作為表名動態查詢。

這是如何做:

  • 使用 SELECT語句創建經典報告,例如select * from dual
  • 在該頁面上創建一個文本項,我們稱其為P22_TABLE_NAME
  • 將其“按輸入時提交”屬性設置為“是”
  • 編輯報告的源並將Type設置為PL / SQL Function Body,返回SQL查詢
  • 函數體應return 'select * from ' || :P22_TABLE_NAME; return 'select * from ' || :P22_TABLE_NAME;
  • 將“使用通用列名稱”屬性設置為“是”,因為您使用的是不同的表名稱,並且所有這些表名稱(最有可能)具有不同的列
  • 運行頁面; 當您將不同的表名稱放入P22_TABLE_NAME項目並按Enter鍵時,報告內容應更改

您應該知道表單可能需要查詢哪些表。 如果您有一個名為TABLE_NAME的應用程序項,則可以將結果合並在一起並選擇合適的表,如下所示:

select col1, col2, col3 from tablex where :TABLE_NAME = 'TABLEX'
union all
select col1, col2, col3 from tabley where :TABLE_NAME = 'TABLEY'
union all
select col1, col2, col3 from tablez where :TABLE_NAME = 'TABLEZ'

這種方法的好處是將檢查查詢的語法是否正確,並且表具有正確的列。 並且該解決方案不受SQL注入攻擊的影響。

缺點是,如果添加了新表,則必須修改查詢。 但是,如果要像這樣快速創建表,則無論如何都要考慮修改策略。

暫無
暫無

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

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