כפי שכולכם יודעים התחביר הבסיסי בSQL של select * יציג את הנתונים של כל השדות בטבלה, אך לצערנו לא ניתן תמיד להשתמש בשיטה זאת.
הסיבה היא ששימוש בselect * בכלים אוטומטים או בכתיבת קוד יכול לגרום לקריסת מערכת כאשר השדות משתנות בטבלה, לכן עדיף לפרט את השדות מאשר לכתוב select *.
העניין קצת מורכב כאשר מדובר בטבלה המכילה מספר רב של שדות. לצורך זה כתבתי סקריפט העוזר לנו במלאכה.
הסקריפט בצורתו הבסיסית:
select 'Select ' || listagg(COLUMN_NAME,',') within group (order by table_name) || ' from ' || owner || '.'||table_name as syntx from SYS.ALL_TAB_COLS WHERE owner='OWNER'and table_name='TABLE_NAME' group by table_name,owner
יש להחליף את את OWNER בשם הסכמה ואת TABLE_NAME בשם הטבלה (בשורה השניה מלמטה). יש להקפיד על אותיות גדולות.
לדוגמא, אם ניקח את טבלת CUSTOMERS בסכמה CHINOOK ונכתוב:
Select * from CHINOOK.CUSTOMER
נקבל את התוצאה הבאה:
נכניס את הפרמטרים לסקריפט מקודם:
select 'Select ' || listagg(COLUMN_NAME,',') within group (order by table_name) || ' from ' || owner || '.'||table_name as syntx
from SYS.ALL_TAB_COLS WHERE owner='CHINOOK' and table_name='CUSTOMER' group by table_name,owner
Select ADDRESS,CITY,COMPANY,COUNTRY,CUSTOMERID,EMAIL,FAX,FIRSTNAME,LASTNAME,PHONE,POSTALCODE,STATE,SUPPORTREPID from CHINOOK.CUSTOMER
כלומר, אותו דבר כמו select * רק עם פירוט השדות.