نمایش نتایج 1 تا 1 از 1

نام تاپیک: چگونه هنگامی که از دستور * Select استفاده می کنیم ترتیب ستون ها را تغییر دهیم ؟

  1. #1
    کاربر دائمی آواتار رسول_57
    تاریخ عضویت
    تیر 1386
    محل زندگی
    تهران
    پست
    218

    چگونه هنگامی که از دستور * Select استفاده می کنیم ترتیب ستون ها را تغییر دهیم ؟

    نوشته جان واتسون

    معمولا با این سوال مواجه می شوم که چگونه می توان یک ستون را در جدول دقیقا بین دو ستون مشخص اضافه نمود؟ جواب هایی که به این سوال داده می شود معمولا به دو صورت است : الف- شما نمی توانید این کار را انجام دهید ب- فرض کنید که اصلا بتوانید چنین کاری را انجام دهید، این کار چه سودی برای شما دارد؟
    در اینجا نمی خواهم با جزئیات بگویم که این کار چه سودی برای ما می تواند داشته باشد! شاید دلیلی که پاسخ دهندگان نوع (ب) می آورند این است که معمولا برنامه نویسان با یک دستور * Select به جستجوی ستون های مورد نظرشان می پردازند و ترتیب ستون ها اصلا برایشان اهمیتی ندارد. اما می خواهم نکته ای را برای شما بازگو کنم. استفاده از دستور * Select از نظر برنامه نویسی اشکالاتی دارد و یک برنامه نویس قوی معمولا از این روش برای کد های SQL استفاده نمی کند؟

    بهرحال بیایید فرض کنیم که به هر دلیلی می خواهیم این کار را انجام دهیم. یعنی ستونی را مابین دو ستون مشخص جدول ایجاد کنیم. برای این کار با استفاده از پایگاه داده اوراکل 12C و با استفاده از کاربر دوست داشتنی Scott و رمز معروفش tiger شروع به نوشتن کد زیر می کنیم :


    orclz> desc dept
    Name Null? Type
    ----------------------------------------------------------- -------- ----------------------------------------
    DEPTNO NOT NULL NUMBER(2)
    DNAME VARCHAR2(14)
    LOC VARCHAR2(13)

    orclz>


    حالا می خواهیم ستون TOTSAL را مابین ستون های DNAME و LOC ایجاد کنیم. به شیوه زیر عمل می کنیم:


    orclz>
    orclz> alter table dept add (totsal number);

    Table altered.

    orclz> desc dept;
    Name Null? Type
    ----------------------------------------------------------- -------- ----------------------------------------
    DEPTNO NOT NULL NUMBER(2)
    DNAME VARCHAR2(14)
    LOC VARCHAR2(13)
    TOTSAL NUMBER

    orclz> select * from dept;

    DEPTNO DNAME LOC TOTSAL
    ---------- -------------- ------------- ----------
    10 ACCOUNTING NEW YORK
    20 RESEARCH DALLAS
    30 SALES CHICAGO
    40 OPERATIONS BOSTON

    orclz>


    ستون جدید در انتهای ستون ها قرار می گیرد. حالا نکته ای جدید از نسخه 12C را به شما نشان می دهیم. ابتدا LOC را پنهان و سپس آشکار می کنیم :


    orclz>
    orclz> alter table dept modify (loc invisible);

    Table altered.

    orclz> select * from dept;

    DEPTNO DNAME TOTSAL
    ---------- -------------- ----------
    10 ACCOUNTING
    20 RESEARCH
    30 SALES
    40 OPERATIONS

    orclz> alter table dept modify (loc visible);

    Table altered.

    orclz> select * from dept;

    DEPTNO DNAME TOTSAL LOC
    ---------- -------------- ---------- -------------
    10 ACCOUNTING NEW YORK
    20 RESEARCH DALLAS
    30 SALES CHICAGO
    40 OPERATIONS BOSTON

    orclz>


    چه اتفاقی افتاد! ظاهرا ترتیب ستون ها عوض شد ؟ بیایید بررسی کنیم که چه اتفاقی ممکن است افتاده باشد؟


    orclz>
    orclz> select column_name,hidden_column,column_id from user_tab_cols where table_name='DEPT';

    COLUMN_NAME HID COLUMN_ID
    ------------------------------ --- ----------
    DEPTNO NO 1
    DNAME NO 2
    LOC NO 4
    TOTSAL NO 3

    orclz> desc dept
    Name Null? Type
    ----------------------------------------------------------- -------- ----------------------------------------
    DEPTNO NOT NULL NUMBER(2)
    DNAME VARCHAR2(14)
    TOTSAL NUMBER
    LOC VARCHAR2(13)

    orclz> alter table dept modify (dname invisible);

    Table altered.

    orclz> desc dept
    Name Null? Type
    ----------------------------------------------------------- -------- ----------------------------------------
    DEPTNO NOT NULL NUMBER(2)
    TOTSAL NUMBER
    LOC VARCHAR2(13)

    orclz> select column_name,hidden_column,column_id from user_tab_cols where table_name='DEPT';

    COLUMN_NAME HID COLUMN_ID
    ------------------------------ --- ----------
    TOTSAL NO 2
    LOC NO 3
    DNAME YES
    DEPTNO NO 1

    orclz> alter table dept modify (dname visible);

    Table altered.

    orclz> desc dept
    Name Null? Type
    ----------------------------------------------------------- -------- ----------------------------------------
    DEPTNO NOT NULL NUMBER(2)
    TOTSAL NUMBER
    LOC VARCHAR2(13)
    DNAME VARCHAR2(14)

    orclz> select column_name,hidden_column,column_id from user_tab_cols where table_name='DEPT';

    COLUMN_NAME HID COLUMN_ID
    ------------------------------ --- ----------
    TOTSAL NO 2
    LOC NO 3
    DNAME NO 4
    DEPTNO NO 1

    orclz> select * from dept;

    DEPTNO TOTSAL LOC DNAME
    ---------- ---------- ------------- --------------
    10 NEW YORK ACCOUNTING
    20 DALLAS RESEARCH
    30 CHICAGO SALES
    40 BOSTON OPERATIONS

    orclz>


    به نظر می رسد هنگامیکه یک ستون را پنهان می کنیم Column-id آن Null می گردد و Column-id ستون های دیگر متناسب با آن تنظیم می گردند. بعد از اینکه آن را آشکار می کنیم اولین Column-id موجود را می گیرد دقیقا بعد از ستون های دیگر. البته این روش می تواند روشی سریع برای شما باشد اما بهتر است برای انجام چنین کاری از ویوها استفاده کنید و البته شاید بهتر باشد اصلا از * Select استفاده نکنید و نام ستون ها را به صراحت در پرس و جویتان مورد استفاده قرار دهید.
    آخرین ویرایش به وسیله رسول_57 : دوشنبه 03 آبان 1395 در 20:35 عصر

تاپیک های مشابه

  1. مبتدی: چگونه از فایل cssاستفاده کنم در page یی که از master page استفاده می کند؟
    نوشته شده توسط speralda در بخش ASP.NET Web Forms
    پاسخ: 4
    آخرین پست: پنج شنبه 15 تیر 1391, 15:12 عصر
  2. پاسخ: 2
    آخرین پست: پنج شنبه 04 اسفند 1390, 01:35 صبح
  3. ویرایش اطلاعات Gridview وقتی که از Template field استفاده می کنیم
    نوشته شده توسط مهدی رحیم زاده در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: سه شنبه 05 بهمن 1389, 23:39 عصر
  4. پاسخ: 4
    آخرین پست: پنج شنبه 31 اردیبهشت 1388, 10:00 صبح
  5. پاسخ: 0
    آخرین پست: چهارشنبه 01 خرداد 1387, 11:22 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •