QL> desc newemp
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NOT NULL NUMBER(2)
declare
empsfile utl_file.file_type;
cursor empscur is
select * from newemp;
begin
empsfile := utl_file.fopen('DIPRJDIR','EMPS.TXT','W');
for rec in empscur
loop
--utl_file.put_line(empsfile,rec.EMPNO||rec.ENAME||rec.JOB||rec.MGR||rec.HIREDATE||rec.SAL||rec.COMM||rec.DEPTNO);
utl_file.put_line(empsfile,lpad(rec.EMPNO,4,'0')||Rpad(rec.ENAME,10,' ')||Rpad(rec.JOB,9,' ')||Rpad(rec.MGR,4,'0')||Rpad(rec.HIREDATE,10,' ')||lpad(rec.SAL,9,'0')||Lpad(rec.COMM,9,'0')||Lpad(rec.DEPTNO,2,'0'));
end loop;
UTL_FILE.FCLOSE(empsfile );
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE( 'ERROR -->' || SQLERRM);
END;
/
私は正しく実行するプログラムを作成しましたが、上司は、データ型の値に従ってパディングを行う必要があると言っています。たとえば、4でパディングするよりもempno番号(4)です。しかし、上記のコードでは、手動で値を記述しました。今、私の上司は、たとえばパディング中に値を動的に割り当てる必要があると言っています(rec.SAL、9、 '0')この9つの値はテーブルから直接取得する必要があります。したがって、上司が上記のコードよりもテーブルを変更した場合は、動作し、コードを再度記述する必要はありません。
pleqseは私を助けます