我有这样的字符串:str:='ac_Abc.88,ac_Abc.99,ac_Abc.77'.我需要在用逗号(,)分割后得到第一个元素.所以即时使用像这样:
str VARCHAR2(500);
dbms_utility.comma_to_table
( list => regexp_replace(str,'(^|,)','\1')
, tablen => l_count
, tab => l_array
);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ORA-20001: comma-separated list invalid near bc.88
ORA-06512: at "SYS.DBMS_UTILITY", line 239
ORA-06512: at "SYS.DBMS_UTILITY", line 272
Run Code Online (Sandbox Code Playgroud)
但如果我有这样的字符串,str:='ac_Abc88,ac_Abc99,ac_Abc77',同样的方法工作正常并给我预期的结果.
所以我想有些东西需要纠正才能考虑"." 作为常规角色.你能建议我怎么解决这个问题.
我可以使用以下语法的call语句调用pl/sql函数:
String call = "{ ? = call p_some_package.some_function( ?, ?, ?, ?, ?) }";
CallableStatement cs = connection.prepareCall(call);
Run Code Online (Sandbox Code Playgroud)
但是我必须使用它们的索引传递参数,因为我必须注册返回值,它没有名称:
cs.registerOutParameter(1, OracleTypes.NUMBER);
cs.setInt(2, someInteger);
...
Run Code Online (Sandbox Code Playgroud)
但是在调用过程时,我可以提供参数名称,因为没有"无名"out参数,因为有一个函数:
cs.setInt("param_name", param_value);
Run Code Online (Sandbox Code Playgroud)
Oracle pl/sql参考声明,对于函数,Oracle会创建一个返回的额外OUT参数.所以我的问题是:是否可以传递此参数的名称或以某种方式为此参数指定名称,并使用它将参数传递给JDBC中的pl/sql函数,就像我为程序做的那样?
类似的问题,没有答案: Java命名参数的名称(用于Oracle JDBC函数结果)
我有一个表,其中一列具有逗号分隔值,(例如:经度,纬度,经度1,纬度1等).
现在我需要交换像(纬度,经度,纬度1,经度1等)的值.
至于试用目的:我创建了一个表如下:
CREATE TABLE string_table
(
slno NUMBER,
old_string VARCHAR2(50),
new_string VARCHAR2(50)
);
/
INSERT INTO STRING_TABLE (SLNO, OLD_STRING)
VALUES (1, '1,2,3,4,5,6');
INSERT INTO STRING_TABLE (SLNO, OLD_STRING)
VALUES (2, '1,2,3,4,5');
INSERT INTO STRING_TABLE (SLNO, OLD_STRING)
VALUES (3, 'a,b,c,d,e,f');
INSERT INTO STRING_TABLE (SLNO, OLD_STRING)
VALUES (4, 'a,b,c,d,e');
COMMIT;
/
Run Code Online (Sandbox Code Playgroud)
现在表格如下:
slno old_string new_string
----- ----------------------
1 1,2,3,4,5,6
2 1,2,3,4,5
3 a,b,c,d,e,f
4 a,b,c,d,e
Run Code Online (Sandbox Code Playgroud)
我需要将交换的值更新为new_string列,结果应如下所示:
slno old_string new_string
----- ----------------------
1 1,2,3,4,5,6 2,1,4,3,6,5
2 1,2,3,4,5 2,1,4,3,5
3 a,b,c,d,e,f b,a,d,c,f,e
4 a,b,c,d,e …Run Code Online (Sandbox Code Playgroud) 在a之前select SOMETHING into v_something,我想知道我的查询是否返回一行.
这是一个很好的方法,但select如果行存在,则成本为2 :
select count(1) into isRowExists from PERSON where CONDITION='Something';
if (isRowExists > 0) then
select NAME into v_name from PERSON where CONDITION='Something';
else
raise name_not_found;
end if;
select count(1) into isRowExists from CAR where CONDITION='Something';
if (isRowExists > 0) then
select MODEL into v_model from CAR where CONDITION='Something';
else
raise model_not_found;
end if;
Run Code Online (Sandbox Code Playgroud)
或类似的东西 :
select NAME into v_name from PERSON where CONDITION='Something';
select MODEL into v_model from CAR where CONDITION='Something'; …Run Code Online (Sandbox Code Playgroud) 我试图从case语句返回一个布尔值,但编译器抱怨ORA-00936:缺少表达式错误:
SELECT
CASE MYCOLUMN
WHEN NULL THEN true
ELSE
false
END,
FROM MYTABLE;
Run Code Online (Sandbox Code Playgroud)
我也试过以下但它不起作用:
SELECT
CASE MYCOLUMN
WHEN NULL THEN SELECT true
ELSE
SELECT false
END,
FROM MYTABLE;
Run Code Online (Sandbox Code Playgroud)
是否有可能做到这一点?
我需要创建一个过程,它将从一个模式中的表中删除所有数据.我尝试过类似的东西
CREATE OR REPLACE PROCEDURE CLEAR_ALL
IS
sql_truncate VARCHAR2(50);
cursor c1 is
SELECT table_name
FROM all_tables
WHERE owner = 'KARCHUDZ_S';
BEGIN
sql_truncate := 'TRUNCATE TABLE :text_string';
FOR table_name in c1
LOOP
EXECUTE IMMEDIATE sql_truncate USING table_name;
END LOOP;
END CLEAR_ALL;
Run Code Online (Sandbox Code Playgroud)
但它给了我两个我无法理解和修复的错误.
错误(13,7):PL/SQL:语句被忽略
错误(13,44):PLS-00457:Statment必须是SQL的类型< - (这个错误我必须翻译,因为我使用大学Oracle 11g基础有波兰语lang)
我有一个节目说
DECLARE
str VARCHAR2(20);
BEGIN
str:='Test';
DBMS_OUTPUT.PUT_LINE(// Here I want to print a character of any index from string//);
END;
/
Run Code Online (Sandbox Code Playgroud)
怎么做?
我可以通过查询dba_procedures来检索所有过程的列表.但是我只能提取过程名称.但我也需要他们的参数.
现在,我知道我可以通过查询all_source表来访问"当前用户可访问的存储对象的文本源".
但是有没有其他方法来检索过程的参数?
我很好奇MAP关键字给予Object类型的成员函数,并希望知道MAP成员函数如何与Oracle中对象类型的成员函数不同
我有一组表,其中主表有150万行.其中一个子项也接近100万行.
主表的数据也必须复制到历史表中.我写了一个PLSQL脚本来首先删除子行和子行,但这个过程耗时太长,接近12小时.
我正在使用批量收集来删除数据.
该脚本将在每天星期一凌晨3点由Java调度程序调用.
我认为在第一次批量删除(有百万行)之后,该过程将很快,因为数据库每周只会增长近30k个寄存器.
解决这个问题的最佳解决方案是什么?
plsql ×10
oracle ×9
sql ×5
oracle11g ×2
delete-row ×1
java ×1
jdbc ×1
procedure ×1
string ×1
string-split ×1