0

コマンドを使用せずにテーブルを記述しようとしていますが、クエリを置換変数DESCRIBEと組み合わせたいです。次の表があるとします。

--DROP TABLE customers       CASCADE CONSTRAINTS PURGE;
CREATE TABLE customers
( customer_id number(10) NOT NULL,
  customer_name varchar2(50) NOT NULL,
  city varchar2(50)
);

ここここの投稿に従って、置換変数を追加すると、次のようになります。

ACCEPT myv CHAR PROMPT 'Enter a table name: '

SELECT 
    column_name AS "Name", 
    nullable AS "Null?",
    concat(concat(concat(data_type,'('),data_length),')') AS "Type"
FROM user_tab_columns
WHERE table_name = '&myv';

これにより、適切な列名を持つ空のテーブルが返されます。入力プロンプトでテーブル名を CUSTOMERS または customers として入力したかどうかは問題ではありません。ただし、次のdesc customers結果が得られます。

Name          Null     Type         
------------- -------- ------------ 
CUSTOMER_ID   NOT NULL NUMBER(10)   
CUSTOMER_NAME NOT NULL VARCHAR2(50) 
CITY                   VARCHAR2(50) 

ここで置換変数を機能させる方法はありますか? ありがとう。

4

1 に答える 1

0

bind variableで動作するようにしました。@kordirkoは、クエリがそのまま機能したと述べたため、何が起こっているのか正確にはわかりません。とにかく、それを機能させるために(私はSQL Developerバージョン4.0.3.16を使用しています)、次のようにバインド変数を使用しました:

SELECT 
    column_name "Name", 
    nullable "Null?",
    concat(concat(concat(data_type,'('),data_length),')') AS "Type"
FROM user_tab_columns
WHERE table_name = :myv;

次に、Enter Binds ウィンドウの値フィールドに CUSTOMERS を入力すると、クエリが正常に実行されました。置換変数が失敗したがバインド変数が失敗した理由を誰かが知っている場合、それは確かに議論に追加されます。

于 2015-05-23T15:44:45.213 に答える