簡體   English   中英

列順序很重要的Oracle DB簡單SELECT

[英]Oracle DB simple SELECT where column order matters

我在Oracle DB中執行一個簡單的SELECT語句,需要以某種特定的順序選擇列。 例:

表A具有100個屬性,其中一個是“章節”,以表中列的順序出現在某處。 我需要首先以“章節”選擇數據,然后以沒有特定順序的方式選擇其余的列。 本質上,我的聲明需要讀取如下內容:

SELECT a.chapter, a. *the remaining columns* FROM A

此外,我不能簡單地鍵入:

SELECT a.chapter, a.*

因為這將選擇“章節”兩次。

我知道SQL語句看起來很簡單,但是如果我知道如何解決這個問題,我可以將這種思想推斷到更復雜的領域。 另外,假設我不能只是滾動查找“章節”列並將其拖到開頭。

謝謝。

您不應在程序中選擇*。 隨着架構的發展,它將帶來您尚不了解的事物。 想一想當有人在其中添加整本書的列時會發生什么? 您原本認為很便宜的查詢突然開始帶來兆字節的數據。

這意味着您必須指定所需的每一列。

最好的選擇就是明確地選擇每一列。

解決此問題的一種快速方法是SELECT a.chapter AS的ChapterCol,a。* FROM table a; 這意味着將有一個列名稱為ChapterCol(假設已經沒有一列名為ChapterCol 。;))

如果您打算將“ SELECT *”嵌入到程序代碼中,那么我強烈建議您不要這樣做。 正如以前的作者所指出的,如果將列添加到表中(或從表中刪除),則設置代碼時要中斷。 簡單的建議是不要這樣做。

如果您在開發工具中使用此功能(查看數據等)。 然后,建議您使用所需的特定列順序創建一個視圖。 從“ SELECT ALL_TAB_COLUMNS的SELECT COLUMN_NAME”捕獲輸出,並使用所需的列順序為該視圖創建一條選擇語句。

這是我無需輸入所有名稱即可構建您的查詢的方式,但是需要一些人工。

始於“選擇章節”

現在,在數據庫上執行另一個選擇,如下所示:

選擇','|| user_tab_cols中的column_name,其中table_name = your_real_table_name和column_name <>'CHAPTER';

現在,以剪切和粘貼的方式從中獲取輸出,並將其附加到開始時的內容。 現在運行該查詢。 它應該是您所要求的。

-

除非有很好的理由,否則不要在查詢中使用SELECT *。 每當架構更改時,它將破壞您的應用程序。

暫無
暫無

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

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