我不太确定这叫做什么,但我花了一些时间思考它,我不知道如何处理它.我确信这很简单.
我有两张桌子,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子句,但我不确定它应该是什么.
提前致谢!
编辑:如果其他人有这个问题,正如 …
这是程序,
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的Oracle(10g):
DATEADD(weekday, -3, GETDATE())
Run Code Online (Sandbox Code Playgroud)
来自T-SQL(SQL Server).这会从当前日期减去3个工作日.我不关心假期或类似的事情(我可以将时间截断自己).只是排除周末是好的.
我在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中将其作为一个简洁的函数来实现,这样我就可以传入当前字符串并返回带有回车符/新换行符的新字符串.
所以我正在开发一个安装程序,安装程序连接到数据库并创建表并填充它们.除非我尝试将行添加到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 scott架构包含这样的表列表
'prefix_A'
'prefix_B'
'prefix_C'
'A'
'B'
'C'
Run Code Online (Sandbox Code Playgroud)
现在我想删除表的列表,包含像'Prefix _'这样的表前缀,但是其他表A,B,C将保持相同.
怎么可能?
提前致谢.
我有一个程序定义为:
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的所有用法之外,是否有更有效的方法来处理这种情况?
**编辑**我犯了一个相当愚蠢的错误 - 我正在写一个程序,而不是一个函数.该过程不返回值.
当我执行这个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返回在数据库中具有多个角色的actor但是如何修改它以便它只返回具有三个以上角色的actor的数量?例如,只返回数字3.
SELECT ACTORID
FROM ROLE
GROUP BY actorID
HAVING COUNT(*) > 3;
Run Code Online (Sandbox Code Playgroud) 我想在Oracle 10g中创建一个表,我想指定日期列的日期格式.如果我使用以下语法:
create table datetest(
........
startdate date);
Run Code Online (Sandbox Code Playgroud)
然后日期列将接受DD-MON-YY我不想要的日期格式.
我想要我的日期列的语法 MM-DD-YYYY
请让我知道如何处理这个问题.
问候,