我正在使用execute immediate创建pl/sql中的临时表,并在表中插入为什么要创建表.
之后我更新了表格.但我得到错误表不存在,因为它不是创建表thr立即执行
示例代码---------
begin
execute immediate 'create table t23 as select ''1'' aa from dual';
update t23 set aa ='2' where aa='1';
COMMIT ;
end;
Run Code Online (Sandbox Code Playgroud) 触发错误:= ORA-04079:触发器规范无效
导致该错误的代码如下:
CREATE OR REPLACE TRIGGER TRGBILLINGADDRESS
AFTER INSERT OR DELETE OR UPDATE ON TBLMACCOUNTADDRESS
add1 wom.tbltaddress.address1%TYPE;
add2 wom.tbltaddress.address2%TYPE;
cityid wom.tbltaddress.city_id%TYPE;
stateid wom.tbltaddress.state_id%TYPE;
pincd wom.tbltaddress.pincode%TYPE;
BEGIN
SELECT address1,address2,city_id,state_id,pincode
INTO add1,add2,cityid,stateid,pincd FROM wom.tbltaddress ta WHERE ta.ID IN (
SELECT vbac.billing_address_id
FROM wom.vw_billaddresschange vbac, wom.tbltaddress ita
WHERE vbac.billing_address_id = ita.ID
AND vbac.lcid = parlcid);
IF add1 = :NEW.address1 AND add2 = :NEW.address2 AND cityid = :NEW.cityid AND stateid = :NEW.stateid AND pincode = :NEW.zip THEN
dbms_output.put_line('Address Already Exist in tbltaddress table'); …Run Code Online (Sandbox Code Playgroud) 我目前正在将一个MySql数据库移植到DB2.到目前为止,我已经能够迁移表,但不幸的是,需要手动迁移函数和触发器.我已经阅读了关于DB2的pl/sql,但DB2的express-c版本不支持它.有关如何将mysql函数和触发器转换为DB2的替代方法吗?
我收到此错误:
Error starting at line 2 in command:
BEGIN
DELETE * FROM book_copies;
DELETE * FROM books;
/* more code here */
END;
Error report:
ORA-06550: line 2, column 10:
PL/SQL: ORA-00903: invalid table name
ORA-06550: line 2, column 3:
PL/SQL: SQL Statement ignored
ORA-06550: line 3, column 10:
PL/SQL: ORA-00903: invalid table name
ORA-06550: line 3, column 3:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
Run Code Online (Sandbox Code Playgroud)
这是荒谬的,因为我的数据库中存在两个表.我可以:
SELECT * …Run Code Online (Sandbox Code Playgroud) 我创建了一个plsql函数,我想创建一个游标并从函数返回此光标.然后我想在Java类中调用此函数并从游标中检索数据.注意:光标返回一行.我写了这样的东西,
CREATE OR REPLACE
FUNCTION FUNCTION1 ( emp_id IN NUMBER)RETURN cursor AS
cursor newCursor(e_id number) is
select * from table1 where employee_id = e_id;
type refCursor is ref cursor;
BEGIN
open newCursor(emp_id);
loop
exit when newCursor%notfound;
fetch newCursor into refCursor;
end loop;
RETURN refCursor;
END FUNCTION1;
Run Code Online (Sandbox Code Playgroud)
如果我想返回游标,我应该使用什么返回类型?
我想知道强弱之间的实际区别ref cursor.
Strong ref_cursor将始终用于返回值,并且编译器在编译期间知道结构,但在弱的情况下,ref cursor它不会返回值,并且编译器在编译期间不知道结构.
这是基本的区别,但我的问题是强者将返回什么值ref cursor以及将使用返回值的位置.
我想能够像这样执行我的下面的过程:
exec procname('29-JAN-2011');
Run Code Online (Sandbox Code Playgroud)
proc代码是:
PROCEDURE procname(pardate VARCHAR2) IS
vardate DATE := to_date(pardate, 'DD-MON-YYYY');
SQLS VARCHAR2(4000);
BEGIN
SQLS := 'SELECT cola, colb
FROM tablea
WHERE TRUNC(coldate) = TRUNC(TO_DATE('''||pardate||''',''DD/MON/YYYY''))';
EXECUTE IMMEDIATE SQLS;
END;
Run Code Online (Sandbox Code Playgroud)
它不断抛出错误:
ORA-00904:"JAN":标识符无效.
它编译,但它在我运行此命令时抛出错误:
EXEC procname('29-JAN-2011');
Run Code Online (Sandbox Code Playgroud) 我正在编写一个报告,我从前端调用了一个函数.我开始将月份信息作为从1到12开始的数字,所以我正在使用
substr(to_date(START_MONTH,'MM'),4,3)
Run Code Online (Sandbox Code Playgroud)
以1月,2月等形式获得月份,现在在我的函数中按开始月份进行分组,然后按开始月份进行排序,因此在输出中得到的值就像
4月,8月,12月由于按月的第一个字母顺序排序,如何从1月到12月开始正确的订单?
有什么建议?
另外如何对数字进行排序,以便2在1之后而不是在1之后?
我在这个功能上有错误.我不知道为什么它不起作用.
你能帮我吗?
CREATE OR REPLACE FUNCTION EMPNAM(empno in number)
RETURN VARCHAR2 IS
DECLARE nam VARCHAR2(40);
BEGIN
SELECT BEZEICHNUNG
INTO nam
FROM PROJ_PROJEKT
WHERE PROJEKTID = empno;
RETURN nam;
END EMPNAM;
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
ERROR: Error at line 7:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
( begin case declare end exception exit for goto if loop mod
null pragma raise return select update while with
continue close current delete fetch lock
insert open rollback savepoint set sql execute …Run Code Online (Sandbox Code Playgroud) 我正在创建一个以sys身份登录的函数.
CREATE FUNCTION Core.Get_Contact_Code
(
First_Name IN NVARCHAR2,
Middle_Name IN NVARCHAR2,
Last_Name IN NVARCHAR2
)
RETURN NVARCHAR2
IS
Ret_Val NVARCHAR2(10);
C_Code NVARCHAR2(10);
CURSOR contact_cursor IS
SELECT Contact_Code FROM (
SELECT Contact_Code
FROM Core.Contacts
WHERE
Contact_Code LIKE UPPER(left(First_Name,2) ||
CASE
WHEN Middle_Name IS NULL THEN left(Last_Name,3)
ELSE left(Middle_Name,1) || left(Last_Name,2)
END || '%')
ORDER BY Contact_Code desc)
WHERE ROWNUM=1;
BEGIN
open contact_cursor;
fetch contact_cursor into C_Code;
close contact_cursor;
IF C_Code IS NULL THEN
Ret_Val :=
UPPER(left(First_Name,2)||
CASE
WHEN Middle_Name IS NULL …Run Code Online (Sandbox Code Playgroud)