Oracle 过程的 LAST_DDL_TIME 未更改

问题描述 投票:0回答:1

我目前正在开发利用 Octopus 技术进行 SQL 脚本的部署场景。在这个过程中,我遇到了一个不寻常的问题。具体来说,当通过脚本(例如 PowerShell 或批处理文件)执行对象时,

LAST_DDL_TIME
列无法更新。这种差异促使我探究这种行为的根本原因。

以下概述了直接从 SQL Developer 执行 DDL 语句与从脚本执行 DDL 语句时观察到的行为:

CREATE OR REPLACE procedure malath_dev.malath_test as
begin
DBMS_OUTPUT.put_line('test malath');
DBMS_OUTPUT.put_line('test malath2');
end;
/
  
CREATE OR REPLACE procedure malath_dev.print_time as
begin
DBMS_OUTPUT.put_line(to_char(sysdate, 'HH24:Mi:ss'));
end;
/  
GRANT INHERIT PRIVILEGES ON USER malath_dev TO PUBLIC;  

enter image description here

enter image description here

但是如果我们使用 PowerShell 脚本执行相同的 DDL 语句,那么

LAST_DDL_TIME
列中不会发生任何更改。

$ExtractedPath = "D:\Projects\"
Write-Host "PWD: $PWD"
Write-Host "ExtractedPath: $ExtractedPath"
ls $ExtractedPath
$Username="malath_dev"
$Password = "malath_dev"
$ServiceName="orclpdb"
Write-Host "Schema Information : UserName : $Username Password: $Password ServiceName: $ServiceName"
$DBConnection = "$Username/$Password@$ServiceName"
$ORACLE_HOME="D:\Installation_Files\Oracle_DB_21\WINDOWS.X64_213000_db_home"
$SQLPLUS_PATH="$ORACLE_HOME\bin\sqlplus.exe"
  
$files = Get-ChildItem $ExtractedPath -Filter *.sql
for ($i=0; $i -lt $files.Count; $i++) 
{
    Write-Host "i: $i"
    $FileName = $files[$i].Name
    $SCRIPT_PATH = "@$ExtractedPath\$FileName"
    Write-Host "SCRIPT_PATH: $SCRIPT_PATH"
    Write-Host "SQLPLUS_PATH: $SQLPLUS_PATH"
    Write-Host "DBConnection: $DBConnection"
    Add-Content -Path "$ExtractedPath\$FileName" -Value "EXIT"
    & $SQLPLUS_PATH $DBConnection $SCRIPT_PATH  
}

Start-Sleep

enter image description here

当前的问题是该专栏没有持续更新。为了澄清这一点,我的调查显示,只有在通过 SQL Developer 先前执行脚本后执行脚本时才会发生更新。例如,尝试以不同的时间间隔多次运行脚本会导致列不更新。

oracle ddl
1个回答
0
投票

如果过程定义不更改,则

last_ddl_time
不会更新。 从文档来看是:

DDL 语句产生的对象和依赖对象的最后一次修改的时间戳(包括授予和撤销)

看起来,如果过程代码“完全”相同,包括大写和空格,那么它就不会被视为已修改。 如果您完全更改代码,那么它将被视为修改,然后

last_ddl_time

将被更新。

小提琴

如果您在从 SQL Developer 重新创建不同过程时看到这种情况不一致,那么在传输代码时可能会添加/删除或转换空格(例如制表符到空格),但这只是猜测。您可能正在做其他也会影响它的依赖项的事情。

© www.soinside.com 2019 - 2024. All rights reserved.