【发布时间】:2021-09-26 10:15:24
【问题描述】:
我编写了 pl/sql 代码来修改一个模式的表中的列值。但是我需要在每个模式的每个表中执行相同的脚本。我将从电子表格中获取表名、列名的列表。
define schema_name = 'D';
define hours_offset = '(-3/24)';
set echo off;
set timi off;
set heading off;
set feedback off;
set linesize 250;
spool convert_01.sql
select 'set echo on;' from dual;
select 'set timi on;' from dual;
select 'set heading on;' from dual;
select 'set feedback on;' from dual;
select 'set linesize 250;' from dual;
select 'spool convert_01.log;' from dual;
select 'update '||owner||'.'||table_name||' set '||column_name||'
='||column_name||' + &hours_offset;'
from dba_tab_columns where owner = '&schema_name' and
(
data_type = 'DATE' or
data_type like 'TIMESTAMP%'
) and
data_type not like 'TIMESTAMP%WITH TIME ZONE'
order by owner, table_name, column_name;
select 'spool off;' from dual;
spool off;
【问题讨论】:
-
您想获取数据库中每个
DATE和TIMESTAMP输入的列并添加一个数字吗?这看起来很奇怪,你为什么要这么做? -
请分享您的 PL/SQL 代码并解释它与上述脚本的关系。
-
顺便说一下,SQL*Plus 脚本中不需要从 dual 中选择,因为 SQL*Plus 有
prompt。
标签: oracle plsql plsql-package