Stored-Procedures

在沒有 Data Studio 的情況下編譯儲存過程時保留縮進格式

  • January 22, 2021

當我使用 CLPplus 控制台(甚至在 dBeaver 中)編譯儲存過程時,所有縮進都被刪除了。只有當我在 Data Studio 中編譯時才會保留格式,但我想用腳本部署項目。

我希望我缺少一些簡單的東西,但是找不到解決方案,甚至找不到任何其他具有相同問題的文章。

使用 CLPplus 我執行了這個腳本文件@c:\temp\proc1.spsql

create or replace procedure proc1()
begin
   declare vId int default 0;
   call dbms_output.put_line(vId+1);

/*
   Testing
*/
end

SELECT TEXT FROM SYSCAT.PROCEDURES WHERE PROCNAME = 'PROC1';產生了以下內容:

create or replace procedure proc1()
begin
declare vId int default 0;
call dbms_output.put_line(vId+1);

/*
Testing
*/
end

它在 clpplus 1.6 中對我來說很好用

$ clpplus -h | head -1
CLPPlus: Version 1.6
$ cat sql
create or replace procedure proc1()
begin
   declare vId int default 0;
   call dbms_output.put_line(vId+1);

/*
   Testing
*/
end
/
SELECT TEXT FROM SYSCAT.PROCEDURES WHERE PROCNAME = 'PROC1'
/
$ clpplus -nw $user/"$password"@$host:$port/$database @"$PWD"/sql
CLPPlus: Version 1.6
Copyright (c) 2009, 2011, IBM CORPORATION.  All rights reserved.


Database Connection Information :
---------------------------------
Hostname = localhost 
Database server = DB2/LINUXX8664  SQL11054 
SQL authorization ID = paul 
Local database alias = BP 
Port = 50003 


DB250000I: The command completed successfully.

create or replace procedure proc1()
begin
   declare vId int default 0;
   call dbms_output.put_line(vId+1);
/*
   Testing
*/
end                                                                                
SQL> 

我不知道儲存過程中的 CLP 或 Dbeaver 條帶格式(不幸的是,CLP 中的視圖是另一回事)。

例如,這是來自 Dbeaver

CREATE PROCEDURE P()
BEGIN
   RETURN 1;
END

然後

SELECT TEXT FROM SYSCAT.PROCEDURES WHERE PROCNAME = 'P'

返回

CREATE PROCEDURE P()
BEGIN
   RETURN 1;
END

從命令行執行 Db2 11.5.4 ,我無法重現您的問題

$ db2 -td@ -vf test.sql 
create or replace procedure proc1()
begin
   declare vId int default 0;
   call dbms_output.put_line(vId+1);

/*
   Testing
*/
end

DB20000I  The SQL command completed successfully.

$ db2 -x "SELECT TEXT FROM SYSCAT.PROCEDURES WHERE PROCNAME = 'PROC1'" | head --bytes 200
create or replace procedure proc1()
begin
   declare vId int default 0;
   call dbms_output.put_line(vId+1);

/*
   Testing
*/
end

如果您不喜歡 CLP 在查看 DDL 時所做的事情,但仍想從命令行工具創建它們,那麼您可以使用CLPPlus,因為我相信它不會去除格式。

引用自:https://dba.stackexchange.com/questions/283164