0

動的 SQL でクエリを作成するにはどうすればよいですか。以下のエラーが表示されます。

 EXECUTE IMMEDIATE 
 'CREATE TABLE SAMPLE
  SELECT EXTRACT (VALUE (d), '''//row/text()''').getstringval () 
  FROM (SELECT XMLTYPE (   '''<rows><row>'''
  || REPLACE ('''venkat,vijay,bylla,12''', ''',''', '''</row><row>''')
   || '''</row></rows>'''
    ) AS xmlval
     FROM DUAL) x,
   TABLE (XMLSEQUENCE (EXTRACT (x.xmlval, '''/rows/row'''))) d';

エラーは次のとおりです。

Error(118,34): PLS-00103: Encountered the symbol "/" when expecting
one of the following:     ( - + case mod new null <an identifier>    
<a double-quoted delimited-identifier> <a bind variable>
4

1 に答える 1

1

引用符が間違っているため、列にエイリアスを設定する必要があります..例:

SQL> begin
  2  EXECUTE IMMEDIATE
  3   'CREATE TABLE SAMPLE AS
  4    SELECT EXTRACT (VALUE (d), ''//row/text()'').getstringval () a
  5    FROM (SELECT XMLTYPE (   ''<rows><row>''
  6    || REPLACE (''venkat,vijay,bylla,12'', '','', ''</row><row>'')
  7     || ''</row></rows>''
  8      ) AS xmlval
  9       FROM DUAL) x,
 10     TABLE (XMLSEQUENCE (EXTRACT (x.xmlval, ''/rows/row''))) d';
 11  end;
 12  /

PL/SQL procedure successfully completed.

SQL> select * from sample;

A
--------------------------------------------------------------------------------
venkat
vijay
bylla
12

しかし、なぜオラクルで動的にテーブルを作成しようとしているのですか? コードでオンザフライでテーブルを作成することを検討している場合、それは悪い習慣であり、オラクルでは避けるべきです (必要に応じて代わりにグローバル一時テーブルを使用してください)。

于 2013-03-26T11:32:29.443 に答える