mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-07-19 20:02:03 +08:00
🐛 fix(oracle): 修复存储过程斜杠分隔执行截断
- 支持 SQL*Plus 斜杠分隔符后的可选分号,避免 Oracle 过程执行出空语句 - 光标落在过程异常尾部或斜杠分隔行时,仍选择完整 PL/SQL 定义执行 - 补充前端语句选择、QueryEditor 执行和后端 split/DBQueryMulti 回归测试
This commit is contained in:
@@ -343,6 +343,48 @@ END cproc_tzhssr_order2sale_A1;`,
|
||||
}
|
||||
}
|
||||
|
||||
func TestSplitSQLStatements_OracleCreateProcedureSkipsSemicolonAfterSqlPlusSlashDelimiter(t *testing.T) {
|
||||
input := `-- 修改函数/存储过程:H2.cproc_tzhssr_order2sale_A1
|
||||
-- 请确认语法兼容当前数据库后执行
|
||||
CREATE OR REPLACE PROCEDURE cproc_tzhssr_order2sale_A1(
|
||||
p_sourceid IN VARCHAR2,
|
||||
p_msg_out OUT NVARCHAR2
|
||||
) AS
|
||||
v_ecnt NUMBER;
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO v_ecnt FROM dual;
|
||||
p_msg_out := '';
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
p_msg_out := substr('订单核销失败,错误信息:' || SQLERRM || ',错误位置:' ||
|
||||
dbms_utility.format_error_backtrace, 1, 1000);
|
||||
END cproc_tzhssr_order2sale_A1;
|
||||
/;
|
||||
SELECT 1 FROM dual;`
|
||||
got := splitSQLStatements(input)
|
||||
want := []string{
|
||||
`-- 修改函数/存储过程:H2.cproc_tzhssr_order2sale_A1
|
||||
-- 请确认语法兼容当前数据库后执行
|
||||
CREATE OR REPLACE PROCEDURE cproc_tzhssr_order2sale_A1(
|
||||
p_sourceid IN VARCHAR2,
|
||||
p_msg_out OUT NVARCHAR2
|
||||
) AS
|
||||
v_ecnt NUMBER;
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO v_ecnt FROM dual;
|
||||
p_msg_out := '';
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
p_msg_out := substr('订单核销失败,错误信息:' || SQLERRM || ',错误位置:' ||
|
||||
dbms_utility.format_error_backtrace, 1, 1000);
|
||||
END cproc_tzhssr_order2sale_A1;`,
|
||||
"SELECT 1 FROM dual",
|
||||
}
|
||||
if !reflect.DeepEqual(got, want) {
|
||||
t.Errorf("splitSQLStatements(%q) = %#v, want %#v", input, got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSplitSQLStatements_OraclePackageSpecAndBodyStayWhole(t *testing.T) {
|
||||
input := `CREATE OR REPLACE PACKAGE pkg_order AS
|
||||
PROCEDURE sync_order(p_id IN NUMBER);
|
||||
|
||||
Reference in New Issue
Block a user