我正在Oracle中编写查询.
我想从右侧获取一个字符串,但字符串长度是动态的.
例如:
299123456789
我想得到123456789
substr(PHONE_NUMBERS,-X,Y)
Run Code Online (Sandbox Code Playgroud)
每个记录的X都不同.
我试过这个:
substr(PHONE_NUMBERS,-length(PHONE_NUMBERS),Y)
Run Code Online (Sandbox Code Playgroud)
它没有用..
我该怎么写这个查询?
在我的Oracle 10g数据库中,我想从表字段的值中删除"空格字符"(空格,制表符,回车符...).
是TRANSLATE()要走的路?例如:
MY_VALUE := TRANSLATE(MY_VALUE,
CHR(9) || CHR(10) || CHR(11) || CHR(12) || CHR(13) || ' ', '');
Run Code Online (Sandbox Code Playgroud)
或者有更好的选择(类似于[:space:]PHP PCRE)?
感谢您的任何建议.
我有一个在循环内执行的提取.如果这个获取失败(没有数据),我想CONTINUE循环到下一个记录EXCEPTION.
这可能吗?
我得到一个ORA-06550&PLS-00201 identifer CONTINUE must be declared
DECLARE
v_attr char(88);
CURSOR SELECT_USERS IS
SELECT id FROM USER_TABLE
WHERE USERTYPE = 'X';
BEGIN
FOR user_rec IN SELECT_USERS LOOP
BEGIN
SELECT attr INTO v_attr
FROM ATTRIBUTE_TABLE
WHERE user_id = user_rec.id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- user does not have attribute, continue loop to next record.
CONTINUE;
END;
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud) 我希望在我们现有的Oracle应用程序中引入一个日志框架来替换DBMS_OUTPUT的使用.
该框架将主要用于帮助调试,并将详细说明诸如启动x过程,参数细节,结束过程x等等.它还应具有为所有或仅一个程序单元,各种级别的跟踪打开的功能实际上什么是标准的日志记录功能.
实现这些要求应该相对简单,但是我希望您的帮助是如何最好地关闭此功能.我想要实现的是在关闭跟踪时可能遇到的最小性能.希望大多数时候都应该这样!
由于应用程序使用10g版本2,我最初喜欢在条件编译中包装日志记录机制的外观,以便在正常操作期间甚至看不到日志记录框架.不幸的是,我不得不勉强放弃这个想法,因为大多数应用程序是使用独立的程序和函数构建的,因此启用日志记录功能可能会使大量代码无效.
我已经看了几个现有的opensource和其他框架\功能的灵感:
log4plsql(http://log4plsql.sourceforge.net/)
APC 在这里的审查 特别是在可接受的影响下让我关注.
OraLog项目(http://oralog.sourceforge.net)
自2007年以来没有更新
PL/VISION(这里)
看起来很旧,自Oracle 8i以来没有变化?
问汤姆仪器(这里)
更新01/04/2014 Tom Kyte现在推荐Tyler Muth的Logger
如果您已经在Oracle应用程序中引入了某种形式的日志记录,如何实现它,特别是如何控制它,我真的很想听听您的经验.
我有许多pl/sql程序,可能需要几分钟才能运行.在开发它们时,我添加了一些打印语句来帮助调试,并提供一些反馈和进度指标.最初,我在小型测试装置上运行这些,输出几乎是瞬间完成的.既然我正在测试需要花费几分钟才能运行的更大的测试集,我发现打印到控制台不再合适,因为在程序结束之前不会打印任何内容.我习惯于在不缓冲输出并立即打印的环境中工作,并且添加简单的打印语句以进行简单的调试和诊断很常见.
是否可以在pl/sql中立即打印输出(不缓冲)?如果没有,人们建议采用哪些替代方案来获得类似的结果?
我正在尝试编写一个简单的查询,我在其中声明一些变量,然后在Oracle的select语句中使用它们.之前我已经能够在SQL Server中执行以下操作:
DECLARE @date1 DATETIME
SET @date1 = '03-AUG-2010'
SELECT U.VisualID
FROM Usage u WITH(NOLOCK)
WHERE U.UseTime > @Date1
Run Code Online (Sandbox Code Playgroud)
从我已经完成的搜索看来,你无法在Select语句中声明和设置这样的变量.这是正确的还是我在忙什么?
MINUS是一个SQL集合操作,它从第一个表中选择元素,然后删除也由Oracle中的第二个SELECT语句返回的行.在SQL Server中,我们可以使用EXCEPT来做同样的事情.
在将我的项目从oracle迁移到SQL Server时,我发现了一个区别.如果第一个结果集没有记录,则minus带来第二个SELECT语句的结果集.但在SQL Server中,EXCEPT不返回任何内容.在那种情况下我该怎么办?我正在迁移我的项目,并希望在SQL Server中执行相同的减函数.
谢谢你的帮助
我正在写一个程序,我需要检查我的选择查询是否返回空记录.(在这个例子中是否没有x,y架子)
我怎样才能做到这一点?
我试过这个:
temp shelves.loadability%TYPE := NULL;
BEGIN
select loadability into temp from shelves where rownumber = x and columnnumber = y;
IF temp IS NOT NULL THEN
/* do something when it's not empty */
ELSE
/* do the other thing when it's empty */
END IF;
Run Code Online (Sandbox Code Playgroud)
但是if的第二个分支从不起作用......
编辑:
哦,这很容易......
temp shelves.loadability%TYPE;
BEGIN
select count(*) into temp from shelves where rownumber = x and columnnumber = y;
IF temp != 0 THEN
/* do something when it's not empty …Run Code Online (Sandbox Code Playgroud) 在Java项目中,JUnit测试执行设置,测试和拆卸.即使在使用内存数据库模拟真实数据库时,通常也会回滚事务或从内存中删除数据库并在每次测试之间重新创建数据库.这为您提供了测试隔离,因为一次测试不会在可能影响下一次测试的环境中留下工件.每个测试都以已知状态开始,不能渗透到另一个测试中.
现在我有了一个Oracle数据库构建,可以创建1100个表和400K代码 - 很多pl/sql包.我想不仅测试分贝安装(全 - 从头开始,部分制作 - 从以前的数据库升级,等等),并确保所有的表格和其他对象是在安装后,我期望的状态,同时也在pl/sql上运行测试(我不确定我怎么做前者 - 建议?).
我希望这一切都从Jenkins运行CI,以便通过回归测试捕获开发错误.
首先,我必须使用企业版而不是XE,因为XE不支持Java SP并且依赖于Oracle Web Flow.即使我消除了这些依赖关系,构建通常需要1.5小时才能加载(完整版本).
那么如何在这种环境下实现测试隔离呢?为每个测试使用事务并将其回滚?好的,那些提交的pl/sql程序怎么样?
我考虑过备份和恢复以在每次测试后重置数据库,或者在每次测试之间重新创建整个数据库(过于激烈).两者都不切实际,因为安装它需要一个多小时.每次测试都这样做是过度和疯狂.
有没有办法在db模式中绘制一条线,然后将其回滚到那个时间点?Sorta就像一个很大的"撤消"功能.除了expdp/impdp或rman之外的东西.也许整个方法都没有了.建议?别人怎么做到这一点?
对于CI或小型生产升级窗口,该测试套件必须在合理的时间内运行(30分钟是理想的).
是否有产品可能有助于实现这种"撤销"能力?