我正在尝试使用滞后函数,因此我可以在不使用游标的情况下将一列与最后一列进行比较.但是,我需要比较的列必须使用别名,因为我正在使用3个联合.这是我要做的一个例子.
SELECT
'Y' AS paid,
lag(paid,1) over (ORDER BY salary) AS prev_paid
FROM pay
UNION
SELECT
'N' as paid,
lag(paid,1) over (ORDER BY salary) AS prev_paid
FROM not_paid
Run Code Online (Sandbox Code Playgroud)
我一直收到错误:PL/SQL:ORA-00904:"付费":无效的标识符
我正在使用Oracle 10g和SqlDeveloper.当我执行以下代码时,它说
"功能wafadar编译警告:执行完成并发出警告"
create or replace function wafadar
return varchar2(10)
is
cursor c1 is
SELECT employee_id,first_name FROM employees where department_id=50 ;
begin
for i in c1
loop
dbms_output.put_line(i.first_name);
end loop;
return 'hello';
end;
Run Code Online (Sandbox Code Playgroud)
最后显示的错误也没有显示警告.为什么会有警告?
我在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中将其作为一个简洁的函数来实现,这样我就可以传入当前字符串并返回带有回车符/新换行符的新字符串.
假设我有一个Date列,其日期为31-JUL-2011.我使用返回31-JUL-11的LAST_DAY(sysdate)得到了当月的最后一个日期.但是当我做一个简单的=比较它没有给出结果..我的意思是假设tablename.lastdateofmonth = LAST_DAY(sysdate)它不给出结果但是如果我使用tablename.lastdateofmonth = to_date('2011/07/31' ,'yyyy/mm/dd')它给出了结果.
谢谢.
我有一个名为Oracle的Oracle DB myC.在这张表中,我有几行,其中两行被称为myCheight, myCwidth.
我需要读取这些值并比较它们 IF myCheight > myCwidth DO switch the values.
我试图从一行读取值,但没有让它工作.我使用Oracles Oracle SQL Developer.
这是我到目前为止提出的:
set serveroutput on;
DECLARE
cursor h is select * from MyC;
type htype is table of h%rowtype index by number;
stage_tab htype;
master_tab htype;
BEGIN
open h;
loop
fetch h bulk collect into stage_tab limit 500;
for i in 1 .. stage_tab.count loop
master_tab(stage_tab(i).id) := stage_tabe(i);
end loop;
exit when h%notfound;
end loop;
close h;
end;
Run Code Online (Sandbox Code Playgroud) 我不是PL/SQL的家人.任何人都可以解释为什么我不能做以下事情?
BEGIN
IF TRUE THEN
CREATE INDEX TestIndex ON SomeTable (SomeColumn);
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
我会收到以下错误:
错误报告:ORA-06550:第3行,第5列:PLS-00103:当遇到以下情况之一时遇到符号"CREATE":如果循环mod为空pragma raise返回选择更新,则使用<<开关大小写声明退出当前删除fetch lock insert open rollback savepoint set sql execute commit forall merge pipe 06550. 00000 - "line%s,column%s:\n%s"*原因:通常是PL/SQL编译错误.*行动:
我可以通过传递此错误的唯一方法是动态sql:
BEGIN
IF TRUE THEN
EXECUTE IMMEDIATE 'CREATE INDEX TestIndex ON SomeTable (SomeColumn)';
END IF;
END;
Run Code Online (Sandbox Code Playgroud) 在PL/SQL Developer中运行的同一查询显示时间,但它没有在Oracle SQL Developer中显示.有没有办法在SQL Developer中获得时间?
在SQL Developer中:

在PL/SQL中:

这是日期字段的详细信息:

我需要一些SQL*Plus脚本的帮助.有没有什么方法可以让它接受一个变量,检查表是否匹配,如果它发现它退出程序而不继续其余的接受语句?
到目前为止我有这个代码:
ACCEPT p_cname PROMPT 'Enter Customer Name: '
DECLARE
v_cname CHAR(20);
BEGIN
SELECT cname INTO v_cname
FROM customer
WHERE cname = '&p_cname';
IF v_name = '&p_cname' THEN
-- Exit the program
END IF;
END;
/
-- Other ACCEPT statements if a match was not found.
Run Code Online (Sandbox Code Playgroud)
如果找到匹配项,我不希望它继续使用程序的其余部分.有没有办法做到这一点?
所以我正在开发一个Web服务,它将使用两个调用数据库的函数从数据库中获取数据.我们的目标是让它如果其中一个参数中有特定值,那么就说
bool x= false;
if ( "Y".Equals( parameterValve, StringComparison.InvariantCultureIgnoreCase ) )
x= true;
if ( x)
cmd.Parameters.Add( "function_call1", OracleType.Cursor ).Direction = ParameterDirection.Output;
else
cmd.Parameters.Add( "function_call2", OracleType.Cursor ).Direction = ParameterDirection.Output;
try
{
grab data here
}
return to webservice
Run Code Online (Sandbox Code Playgroud)
我已经完成了所有这些设置,它适用于第一个参数.但是,当我使用第二个参数调用调用webservice时,我收到此错误.
System.Data.OracleClient.OracleException: ORA-06503: PL/SQL:
Function returned without value
ORA-06512: at "database.package", line 103
ORA-06512: at line 1
Run Code Online (Sandbox Code Playgroud)
我的问题是这个错误发生的原因究竟是什么?是因为我正在调用函数不正确或者函数调用本身是否有错误?
基本上我已经盯着这段代码了一段时间,现在试图弄清楚我做错了什么,所以我希望有人能够指出我正确的方向,我应该在哪里纠正这个错误.
非常感谢任何帮助或建议.
谢谢!
在PL SQL中,我正在编写一个使用DB链接的存储过程:
CREATE OR REPLACE PROCEDURE Order_Migration(us_id IN NUMBER, date_id in DATE)
as
begin
INSERT INTO ORDERS(order_id, company_id)
SELECT ORDER_ID_SEQ.nextval, COMPANY_ID
FROM ORDERS@SOURCE
WHERE USER_ID = us_id AND DUE_DATE = date_ID;
end;
Run Code Online (Sandbox Code Playgroud)
它会在特定日期由特定用户完成所有订单并将其插入新数据库中.它调用一个序列来确保订单上没有重复的PK,并且效果很好.
但是,我希望使用相同的过程对另一个将order_id作为外键的表执行第二次INSERT.所以我需要添加刚刚创建的所有order_id,以及来自SOURCE的匹配数据:
INSERT INTO ORDER_COMPLETION(order_id, completion_dt)
SELECT ????, completion_dt
FROM ORDER_COMPLETION@SOURCE
Run Code Online (Sandbox Code Playgroud)
如何跟踪刚刚创建的order_id与我需要从源数据库中提取数据的order_id相匹配?
我考虑制作一个临时表,但你不能在程序中创建它们.
其他信息:我将从我正在编写的C#应用程序中调用此过程