标签: oracle10g

SQL Join使用'unless'子句

我不太确定这叫做什么,但我花了一些时间思考它,我不知道如何处理它.我确信这很简单.

我有两张桌子,foo和bar.他们是这样的:

Foo表:

 | id | name
 --------------
 | 1  | blah
 | 2  | blarg
 | 3  | blag
Run Code Online (Sandbox Code Playgroud)

条形图表(baz的含义无关紧要):

 | fooId | baz |
 ---------------
 |   1   | 100 |
 |   1   | 94  |
 |   1   | 27  |
 |   2   | 94  |
 |   3   | 19  |
Run Code Online (Sandbox Code Playgroud)

所以,每个Foo多个Bars.我想选择所有他们的baz为94的Foos,除非他们的baz为100.所以在上面的例子中我只想选择id为2的Foo.

我试着按照以下方式做一些事情:

SELECT id FROM foo 
LEFT JOIN bar 
ON foo.id = bar.fooId
WHERE bar.baz = 94
AND bar.baz != 100
Run Code Online (Sandbox Code Playgroud)

但很明显,到目前为止只有我.我确定这里可能有某种group by子句,但我不确定它应该是什么.

提前致谢!

编辑:如果其他人有这个问题,正如 …

sql join oracle10g

1
推荐指数
1
解决办法
2740
查看次数

Oracle游标未按预期工作

这是程序,

CREATE OR REPLACE PROCEDURE provsnXmlCmprsn (
            encyNo SAS_PRO_CTL.AGENCYNO%TYPE, period SAS_PRO_CTL.PERIODE%TYPE) IS

xmlContent SAS_PRO_XML.XMLCONTENT%TYPE;
sasProvisionId SAS_PRO_CTL.SASPROVISIONID%TYPE;

CURSOR crsrXml IS
SELECT XMLCONTENT, c.SASPROVISIONID FROM SAS_PRO_XML x, SAS_PRO_CTL c
  WHERE x.SASPROVISIONID = c.SASPROVISIONID AND c.PERIODE = period 
                                    AND c.AGENCYNO = agencyNo ORDER BY XMLLINENO;

BEGIN
DBMS_OUTPUT.put_line('Params: ' || agencyNo || ', ' || period);

OPEN crsrXml;
LOOP
  FETCH crsrXml INTO xmlContent, sasProvisionId;
  EXIT WHEN crsrXml%NOTFOUND;
    DBMS_OUTPUT.put_line('XML Content Length: ' || LENGTH(xmlContent));
END LOOP;
CLOSE crsrXml;

END provsnXmlCmprsn;
Run Code Online (Sandbox Code Playgroud)

cursor根据条件和参数值,查询中的查询是5行,而预期是1行.当独立运行时,相同的查询会产生1行.令人惊讶的是,cursor无论条件是否c.PERIODE …

oracle plsql stored-procedures cursor oracle10g

1
推荐指数
1
解决办法
1421
查看次数

Oracle(10g)相当于DATEADD(工作日,-3,GETDATE())

我正在寻找相当于Oracle的Oracle(10g):

DATEADD(weekday, -3, GETDATE())
Run Code Online (Sandbox Code Playgroud)

来自T-SQL(SQL Server).这会从当前日期减去3个工作日.我不关心假期或类似的事情(我可以​​将时间截断自己).只是排除周末是好的.

oracle oracle10g date-arithmetic

1
推荐指数
1
解决办法
5946
查看次数

基于特定字符串匹配中断字符串

我在Oracle中有以下字符串作为一个连续的行,而不是将此信息显示为一个连续的字符串,我实际上想要在出现":F"和":L"之前追加一个回车符/换行符,还需要在F和L之前删除":"

所以当前字符串:

F:AA BB:F:BB CC dd:F:ZZ Xx Y:L:Hello:F:Goodbye
Run Code Online (Sandbox Code Playgroud)

新显示的字符串:

F:AA BB
F:BB CC dd
F:ZZ Xx Y
L:Hello
F:Goodbye
Run Code Online (Sandbox Code Playgroud)

试图在Oracle pl/sql中将其作为一个简洁的函数来实现,这样我就可以传入当前字符串并返回带有回车符/新换行符的新字符串.

regex oracle plsql oracle10g

1
推荐指数
1
解决办法
211
查看次数

创建ORA-01422的原因:精确提取返回的请求行数超过了请求的行数

所以我正在开发一个安装程序,安装程序连接到数据库并创建表并填充它们.除非我尝试将行添加到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)

c# oracle plsql oracle10g ora-01422

1
推荐指数
1
解决办法
3617
查看次数

如何从Oracle中的模式中删除表的列表?

我的Oracle scott架构包含这样的表列表

'prefix_A'
'prefix_B'
'prefix_C'
'A'
'B'
'C'
Run Code Online (Sandbox Code Playgroud)

现在我想删除表的列表,包含像'Prefix _'这样的表前缀,但是其他表A,B,C将保持相同.

怎么可能?

提前致谢.

sql oracle oracle10g

1
推荐指数
1
解决办法
5256
查看次数

Oracle PL/SQL:为IN变量分配新值

我有一个程序定义为:

CREATE OR REPLACE PROCEDURE foo (
  AS_OF_DATE_IN IN DATE DEFAULT TRUNC(sysdate)-1
) AS ...
Run Code Online (Sandbox Code Playgroud)

哪些可以用这些方式执行:

-- passes '11-NOV-2011'
exec foo('11-NOV-2011');

--set DEFAULT value (yesterday's date)
exec foo();

--makes things more difficult, as default value isn't set
exec foo(NULL);
Run Code Online (Sandbox Code Playgroud)

我想做的是:

AS_OF_DATE_IN:=NVL(AS_OF_DATE_IN, TRUNC(sysdate)-1);
Run Code Online (Sandbox Code Playgroud)

但它会产生重新分配错误.

除了使用NVL()包装AS_OF_DATE_IN的所有用法之外,是否有更有效的方法来处理这种情况?

**编辑**我犯了一个相当愚蠢的错误 - 我正在写一个程序,而不是一个函数.该过程不返回值.

oracle plsql oracle10g

1
推荐指数
1
解决办法
2078
查看次数

Oracle PL/SQL选择和更新

当我执行这个PL/SQL块时,我一直收到"没有找到数据".如果我注释掉输出行,那么一切都按照我的怀疑输出,但更新语句永远不会执行.有任何想法吗?

set serveroutput on;
Declare
   TYPE type_emp IS RECORD(
        emp_salary emp.salary%TYPE);
     rec_emp type_emp;
   v_stars varchar2(50) ;
   v_count number(3);
   s_num number(3);
begin
 SELECT min(employee_id) into s_num from emp;
 SELECT count(*) into v_count from emp;
 v_count := v_count + s_num;
 for i in s_num .. v_count loop
   SELECT salary
     into rec_emp
     from emp
    where employee_id = i; 
    if rec_emp.emp_salary <1000 then 
        v_stars := null;
      elsif rec_emp.emp_salary >=1000 and rec_emp.emp_salary <2000 then 
        v_stars := '*';
      elsif rec_emp.emp_salary >=2000 and rec_emp.emp_salary <3000 then 
        v_stars …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql oracle10g

1
推荐指数
1
解决办法
2114
查看次数

返回一个数字而不是条目

这个sql返回在数据库中具有多个角色的actor但是如何修改它以便它只返回具有三个以上角色的actor的数量?例如,只返回数字3.

SELECT ACTORID
FROM ROLE
GROUP BY actorID
HAVING COUNT(*) > 3;
Run Code Online (Sandbox Code Playgroud)

sql oracle10g

1
推荐指数
1
解决办法
70
查看次数

使用Date在Oracle中创建表

我想在Oracle 10g中创建一个表,我想指定日期列的日期格式.如果我使用以下语法:

create table datetest(
........
startdate date);
Run Code Online (Sandbox Code Playgroud)

然后日期列将接受DD-MON-YY我不想要的日期格式.

我想要我的日期列的语法 MM-DD-YYYY

请让我知道如何处理这个问题.

问候,

sql oracle oracle10g

1
推荐指数
1
解决办法
3万
查看次数