0

Oracle SELECT コマンドの出力を bash 変数に保存しようとしています。次の行を試しましたが、うまく機能しませんでした...

ACCESS_SQL=`{
    sqlplus << EOF
    ${USER}/${PASSWORD}@DB
    set head off;
    set feedback off;
    set pagesize 5000;
    set linesize 30000;
    set serveroutput on;
    DECLARE
    data varchar(5000);
    BEGIN
    select ACCESS_ID, PROFILE_ID, START_DATE, END_DATE, PLATFORM, ACCESS_TYPE, PERM_FLAG, ACTIVE_FLAG into data from uam.access_list where USER_ID='${USER_ID}';
    dbms_output.put_line(data);
    END;
    /
    exit;
EOF
    }`

私が得るエラーステートメントは次のとおりです。

SQL> SQL> SQL> SQL> SQL> SQL>   2    3    4    5    6    7      select ACCESS_ID, PROFILE_ID, START_DATE, END_DATE, PLATFORM, ACCESS_TYPE, PERM_FLAG, ACTIVE_FLAG into data from uam.access_list where USER_ID='PZ230';
                                                                                                                *
ERROR at line 4:
ORA-06550: line 4, column 110:
PL/SQL: ORA-00947: not enough values
ORA-06550: line 4, column 2:
PL/SQL: SQL Statement ignored

varchar を使用するのが正しいことかどうか疑問に思っていました...

4

1 に答える 1

2

select into変数を使用して出力する必要はありませんdbms_output.put_line。(select into複数の列を単一のデータ変数に選択することはできないため、ステートメントはとにかく機能しません。)

代わりに、次のようにします。

data=$(sqlplus -S ${USER}/${PASSWORD} << EOF
  set head off
  set feedback off
  set pagesize 5000
  set linesize 30000
  select ACCESS_ID, PROFILE_ID, START_DATE, END_DATE, PLATFORM, ACCESS_TYPE, PERM_FLAG, ACTIVE_FLAG from uam.access_list where USER_ID='${USER_ID}';
  exit
EOF)

echo "$data"
于 2013-07-02T09:27:41.223 に答える