gpt4 book ai didi

oracle - 仅更改外部表 BADFILE、LOGFILE 和 DISCARDFILE 参数

转载 作者:行者123 更新时间:2023-12-04 03:10:13 24 4
gpt4 key购买 nike

我有几个外部表用于将文件数据读入数据库,每个表用于特定的文件规范。

对于单一格式的文件,通过将表指向新的默认目录和新文件名来重用表。这工作正常,但我现在需要动态更改 BADFILE、LOGFILE 和 DISCARDFILE 参数,同时保持其余访问参数不变。

有没有一种直接的方法可以做到这一点,而不必重新指定所有其他访问参数(列转换文件分隔符等)?

最佳答案

不幸的是,如果不重新指定其他访问参数,就无法仅更改 BADFILE、LOGFILE 和 DISCARDFILE 参数。

对于它的值(value)以及将来发现此问题的任何人,我最终解决了以下问题:

选择外部表并对其访问参数使用 REGEXP_REPLACE,以使用我提供的新值替换与 BADFILE、LOGFILE 和 DISCARDFILE 及其关联值匹配的访问参数 BLOB 的部分。

  CURSOR external_table_cur(
cp_external_table IN VARCHAR2,
cp_new_log_dir IN VARCHAR2,
cp_log_file IN VARCHAR2
)
IS
SELECT table_name,
REGEXP_REPLACE(
access_parameters,
<REGEX PATTERN>,
cp_new_log_dir||':'''||LOWER(cp_log_file),
1,
0,
'i'
) AS new_access_params
FROM all_external_tables
WHERE table_name = UPPER(cp_external_table);

然后我使用动态 SQL 来更改外部表并提供新的访问参数。
  -- Point external table to new file, directory and access params
EXECUTE IMMEDIATE(
'ALTER TABLE '
|| p_table_name
|| ' DEFAULT DIRECTORY '
|| p_directory
|| ' LOCATION ('''
|| p_filename
|| ''') '
|| ' ACCESS PARAMETERS ('
|| TO_CHAR(new_access_params)
|| ')'
);

这并不理想,我最终不得不重新指定所有访问参数,但使用 REGEX(并完全测试输出)意味着该过程不会太痛苦或太慢。

关于oracle - 仅更改外部表 BADFILE、LOGFILE 和 DISCARDFILE 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7244914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com