הצטרפו לקבוצות שלנו לקבלת עדכונים מרוכזים פעם בשבוע:

ווטסאפ:
http://wa.dwh.co.il
טלגרם:
http://telegram.dwh.co.il

כפי שכולכם יודעים התחביר הבסיסי ב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

 

נקבל את התוצאה הבאה:

02100 01

נכניס את הפרמטרים לסקריפט מקודם:

 
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 * רק עם פירוט השדות.