|
2012-1-10 所有答案都不正确。
在一个serializable事务中,事务一开始的SCN会被记录下来,接下来如果要修改的行的SCN大于这个开始事务的SCN, 就会引发异常:
ORA-08177: can't serialize access for this transaction
注意C,D选项并没有真正修改表而只是加了行锁,但是最后COMMIT了,行的SCN也会被修改。
=====================================
2012-1-11 UTL_FILE读文件
作者:Steven Feuerstein
难度:中
我需要写一个过程来显示一个文件中每一行的前N个字符。
我创建了一个名字为"test.txt"的文件,它包含5行文本:
01234
012345
0123456
01234567
012345678
然后我把它保存在一个目录下,这个目录在ORACLE数据中可以通过DIRECTORY对象"PLCH_TEMP"来访问(这个目录对象在这个SCHEMA下面已经创建好了)
这是我未完成的过程:
CREATE OR REPLACE PROCEDURE plch_show_start (
dir_in IN VARCHAR2
, file_in IN VARCHAR2
, length_in IN PLS_INTEGER)
IS
l_file UTL_FILE.file_type;
l_line VARCHAR2 (32767);
BEGIN
/*BODY*/
EXCEPTION
WHEN NO_DATA_FOUND
THEN
UTL_FILE.fclose (l_file);
END;
哪些选项可用来取代上面的/*BODY*/注释,从而使得我执行下列代码块时:
BEGIN
plch_show_start ('PLCH_TEMP', 'test.txt', 6);
END;
/
我会在屏幕上看到:
01234
012345
012345
012345
012345
(A)
l_file :=
UTL_FILE.fopen (dir_in, file_in, 'R');
LOOP
UTL_FILE.get_line (
l_file, SUBSTR (l_line, 1, length_in));
END LOOP;
(B)
l_file :=
UTL_FILE.fopen (dir_in, file_in, 'R');
LOOP
UTL_FILE.get_line (l_file, l_line);
DBMS_OUTPUT.put_line (SUBSTR (l_line, 1, length_in));
END LOOP;
(C)
UTL_FILE.display_file (l_file, length_in);
(D)
l_file :=
UTL_FILE.fopen (dir_in, file_in, 'R');
LOOP
UTL_FILE.get_line (l_file, l_line, length_in);
DBMS_OUTPUT.put_line (l_line);
END LOOP;
(E)
l_file :=
UTL_FILE.fopen (dir_in, file_in, 'R'
, max_linesize => length_in);
LOOP
UTL_FILE.get_line (l_file, l_line);
DBMS_OUTPUT.put_line (l_line);
END LOOP; |
|