为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:kylin v10
【CPU】: x86架构
【问题描述】:存储过程中 语句结束符怎么定义?先定义存储过程,再执行,此sql在文件中ranger_core_db_oracle_1.sql文件,此sql文件需要再程序中执行。采用默认“;”作为分隔符,会报错。
sql如下:
CREATE OR REPLACE PROCEDURE spdropsequence(ObjName IN varchar2)
IS
v_counter integer;
BEGIN
select count() into v_counter from user_sequences where sequence_name = upper(ObjName);
if (v_counter > 0) then
execute immediate 'DROP SEQUENCE ' || ObjName;
end if;
END;
call spdropsequence('SEQ_GEN_IDENTITY');
call spdropsequence('X_ACCESS_AUDIT_SEQ');
call spdropsequence('X_ASSET_SEQ');
call spdropsequence('X_AUDIT_MAP_SEQ');
java执行语句如下:
java -Djava.security.egd=file:///dev/urandom -cp /usr/kdp/1.0/ranger/admin/ews/lib/DmJdbcDriver18.jar:/usr/kdp/1.0/ranger/admin/jisql/lib/* org.apache.util.sql.Jisql -driver dm.jdbc.driver.DmDriver -cstring jdbc:dm://192.168.12.128:52360 -u 'ranger' -p 'ranger' -noheader -trim -input /usr/kdp/1.0/ranger/admin/db/oracle/optimized/current/ranger_core_db_oracle_1.sql -c ;
对于执行语句
块,创建触发器、存储过程、函数、包以及模式等时需要用“/”结束。
在Dbeaver中需要添加两个//
CREATE OR REPLACE PROCEDURE spdropsequence(ObjName IN varchar2)
IS
v_counter integer;
BEGIN
select count(*) into v_counter from user_sequences where sequence_name = upper(ObjName);
if (v_counter > 0) then
execute immediate 'DROP SEQUENCE ' || ObjName;
end if;
END;
//
存储过程结尾添加一行
/
才可以执行存储过程。