所以我正在开发一个安装程序,安装程序连接到数据库并创建表并填充它们.除非我尝试将行添加到certian表中,否则此方法的每个方面都能正常工作.
declare
retVal INTEGER;
rptID INTEGER;
catID INTEGER;
wsID INTEGER;
paramID INTEGER;
dtID INTEGER;
begin
select PK into catID from RPT_CATEGORY where KEYVALUE = 'ProductivityReportsCategory';
select PK into rptID from RPT_REPORT where KEYVALUE = 'ProductivitySummaryReport2';
select PK into wsID from RPT_WEBSVC where KEYVALUE = 'NotApplicable' and category_fk = catID;
Run Code Online (Sandbox Code Playgroud)
填充数据库的select语句如下所示:
select PK into wsID from RPT_WEBSVC where KEYVALUE = 'GetMachineNameList' and category_fk = catID;
paramID := RPT_CONFIGURATION.ADD_PARAMETER( rptID, wsID, dtID, 'Machine', 'parameters.GetProductivityDataSet3.inserterid', 4, NULL, NULL, NULL, 0, 0, 0, 'Y', …Run Code Online (Sandbox Code Playgroud) 我的oracle表中有一个CLOB数据类型的列.如何在此列中存储.txt文件以及如何检索相同的文件?
下面是表定义
fileID Number
logFile CLOB
Run Code Online (Sandbox Code Playgroud)
提前致谢
我在employee表中有一个Name列.我希望看到所有员工姓名都有字母以外的字符.对此最好的查询是什么?
另一个要求:返回所有甚至没有单个字母的名称.
注意:在这种情况下,任何其他英文字母都不被视为字母.在我的场景中,'AndréMüller'的文字中有一些非字母的字符.
DECLARE @Employee TABLE (EmpID INT, EmpName VARCHAR(1000))
INSERT INTO @Employee (EmpID, EmpName) VALUES(1,'André Müller')
INSERT INTO @Employee (EmpID, EmpName) VALUES(2,'Lijo')
INSERT INTO @Employee (EmpID, EmpName) VALUES(3,'88')
INSERT INTO @Employee (EmpID, EmpName) VALUES(4,'--@#')
INSERT INTO @Employee (EmpID, EmpName) VALUES(5,'é ü')
Run Code Online (Sandbox Code Playgroud)
Aproach 1和Approach 2都在工作(感谢发布答案的人).哪个更好,为什么?
--Aproach 1
SELECT * FROM @Employee WHERE EmpName COLLATE Latin1_General_CI_AS LIKE '%[^a-z]%'
--Approach 2
SELECT * FROM @Employee WHERE EmpName LIKE '%[^a-zA-Z]%'
Run Code Online (Sandbox Code Playgroud)
谢谢
Lijo
是否可以在PL/SQL块中执行类似的操作:
SELECT 'a'+1 FROM dual;
结果应该是"b".
我有一个问题
Select
(SELECT id FROM xyz M WHEREM.ID=G.ID AND ROWNUM=1 ) TOTAL_X,
count(*) from mno G where col1='M' group by col2
Run Code Online (Sandbox Code Playgroud)
现在从子查询我必须为此获取ramdom id
Select
(SELECT id FROM xyz M WHEREM.ID=G.ID AND ROWNUM=1 order by dbms_random.value ) TOTAL_X,
count(*) from mno G where col1='M' group by col2
Run Code Online (Sandbox Code Playgroud)
但是,oracle显示错误
"Missing right parenthesis".
Run Code Online (Sandbox Code Playgroud)
查询有什么问题,我怎么能得到这个查询来获得随机ID.请帮忙.
要允许超级用户/管理员登录我的系统,我正在运行(更大版本)此查询:
Select *
From mytable
Where (:id = 'Admin' Or :id = mytable.id);
Run Code Online (Sandbox Code Playgroud)
如果我传递用户ID,我会获得该用户的所有数据; 如果我传递字符串'Admin',我会得到所有数据.这是有效的,因为Oracle的OR是一个短路运算符.
但是,如果我将'Admin'作为一个包常量并使用函数来获取它,就像这样
Select *
From mytable
Where (:id = mypackage.GetAdminConstant Or :id = mytable.id);
Run Code Online (Sandbox Code Playgroud)
ORA-01722: invalid number当我通过'Admin'时,我得到了.
当我引入函数时,为什么OR会失去其短路方面?
为什么我会收到以下错误?
Error starting at line 1 in command:
select FUNC from dual
Error report:
SQL Error: ORA-14551: cannot perform a DML operation inside a query
ORA-06512: at "ANONYMOUS.FUNC", line 15
14551. 00000 - "cannot perform a DML operation inside a query "
*Cause: DML operation like insert, update, delete or select-for-update
cannot be performed inside a query or under a PDML slave.
*Action: Ensure that the offending DML operation is not performed or
use an autonomous transaction to perform the …Run Code Online (Sandbox Code Playgroud) 我熟悉Java JDBC并经常使用它来运行简单的SQL.但是,我想运行类似下面的内容.这比普通的SQL更多PL/SQL,因此我的问题.我不是从Oracle机箱运行它,而是从我自己的计算机运行它.有人可以帮助我使用Java运行这种PL/SQL吗?
spool C:\count.txt;
DEFINE date="TO_DATE ('08-29-2011','mm-dd-yyyy')";
SET NEWPAGE 0;
SET SPACE 0;
SET LINESIZE 500;
SET PAGESIZE 0;
SET ECHO OFF;
SET FEEDBACK OFF;
SET VERIFY OFF;
SET HEADING OFF;
SET TRIMSPOOL ON;
alter session set nls_date_format='yyyy-mm-dd hh24:mi';
select 'TABLE1', count(*) from SCHEMA.TABLE1 where modifyts < &date;
select 'TABLE2', count(*) from SCHEMA.TABLE2 where modifyts < &date;
select 'TABLE3', count(*) from SCHEMA.TABLE3 where modifyts < &date;
spool off;
Run Code Online (Sandbox Code Playgroud) 我把这个光标放在一个包中的过程中:
PROCEDURE CANCEL_INACTIVE(IN_DAYS_OLD NUMBER)
IS
CURSOR inactive IS
SELECT * FROM MY_TABLE
WHERE STATUS_CHANGED_DATE <= TRUNC(SYSDATE-IN_DAYS_OLD)
AND CANCEL_CD IS NULL;
rec inactive%ROWTYPE;
BEGIN
OPEN inactive;
LOOP
FETCH inactive INTO rec;
EXIT WHEN inactive%NOTFOUND;
-- do an update based on rec.id
END LOOP;
END;
END CANCEL_INACTIVE;
Run Code Online (Sandbox Code Playgroud)
每次我测试或运行该过程时,非活动始终为零行.但是,当我将EXACT相同的查询放入SQL窗口时,我得到了我正在寻找的行.
有没有搞错?
这是一个关于最佳实践的问题.我有一个类似于此的PL/SQL块
DECLARE
--work variables
PROCEDURE p1(in_parameter1, out_parameter1, out_parameter2...) IS
BEGIN
--do stuff
--select ( ... ) into ( ... ) from t1 where ( ... )
END;
PROCEDURE p2(in_parameter1, out_parameter1, out_parameter2...) IS
BEGIN
--do stuff
--insert/update tables
--do more stuff
END;
BEGIN -- MAIN PROCESS STARTS HERE
open c1;
fetch c1 into c1RowData;
EXIT WHEN c1%NOTFOUND
--call procedure1
--do stuff
--call procedure2
--do stuff
--do stuff
--call procedure1
--call procedure2
END;
/
EXIT;
Run Code Online (Sandbox Code Playgroud)
过程p1和p2中的语句可能会引发异常(NO_DATA_FOUND,DUP_VAL_ON_INDEX,...).
您认为处理此异常的最佳方法是什么?它们是应该在程序内处理还是你认为我应该用TRY-CATCH块围绕每个调用主体中的程序?