这里是我演示用的简单PL/SQL代码。
create table cust(cname varchar(10));
set SERVEROUTPUT ON;
create or replace trigger tgr
before insert on cust
for each row
enable
begin
dbms_output.put_line('Trigger hit on insert');
end;
/
insert into cust values('John');
产出:/
Table CUST created
Trigger TGR comp
我正在开发一个简单的函数,它可以自动更新表格中的内容。
create or replace function total()
returns void as $$
declare
sum int;
begin
sum = (SELECT count(copy_id) FROM copies);
update totalbooks
set all_books = sum
where num = 1;
end;
$$ language plpgsql;
如果我执行"select total();“,它工作得很好,所以我做了一个函数触发器,让它自动更新:
我有一些关于扳机的错误..。
我已经翻阅了这份文件,但没有找到任何解决办法。
触发器简单如下:
CREATE OR REPLACE TRIGGER upm AFTER INSERT ON transaction
BEGIN
UPDATE manufacturer M SET M.mPhoneNumber = M.mPhoneNumber+1 WHERE
M.mID =
(SELECT P.mID
FROM part P where p.pID = :NEW.pID);
END;
/
这个看起来不错..。但总是以错误告终。
2/1 PL/SQL
嗨,我正在尝试使用连接描述符和新创建的SQL凭据连接到Oracle 12c实例。但是,当我试图使用凭据连接时,我得到:
ORA-00604: error occurred at recursive SQL level 1
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 18
我设法找到了关于这方面的可能文档:。
但不幸的是,我没有Oracle支持帐户来查看详细信息。我个人的猜测是,一些登录PL/SQL (一个触发器或过程)正在运行,并且我已经获得的凭据
我试图实现这个触发器,以确保用户不能评论他们自己的出版物。
CREATE OR REPLACE FUNCTION not_comment() RETURNS TRIGGER AS
$BODY$
BEGIN
IF EXISTS (SELECT *
FROM
(SELECT publisherID FROM comment INNER JOIN post USING (postID) WHERE NEW.postID = post.postID) AS comment_userID,
(SELECT publisherID F
当我需要使用触发器时,我使用PostgreSQL 11.8并面临任务。主要目标--当从表产品中设置或更新某些行时,在执行update或INXERT之后,对于具有相同created_at products的表products中的所有存在行,都需要set group_identity数据。我烧了这个扳机。
CREATE OR REPLACE FUNCTION maint_sales_summary_bytime() RETURNS TRIGGER
AS $maint_sales_summary_bytime$
DECLARE
delta_time_key
在选择id时,它不能等于0,值也不能是(null)。我写道:
WHERE id IS NOT NULL (+) and id not in ('0')
我有两个错误
错误(9,5):PL/ SQL :忽略SQL语句
错误(38,119):PL/ SQL : ORA-00933: SQL命令未正确结束我将其更改为:
WHERE id IS NOT NULL (+) and id is not ('0')
同样的错误也发生了。我应该写什么作为WHERE子句?
这是我目前所拥有的:
CREATE OR REPLACE TRIGGER MYTRIGGER
AFTER INSERT ON SOMETABLE
FOR EACH ROW
DECLARE
v_emplid varchar2(10);
BEGIN
SELECT
personnum into v_emplid
FROM PERSON
WHERE PERSONID = :new.EMPLOYEEID;
dbms_output.put(v_emplid);
/* INSERT INTO SOMEOTHERTABLE USING v_emplid and some o
我有一个SQL触发器,如下
GO
create trigger ExpDateCheckCard
On Card
FOR Insert, Update
As
Declare @expDate as DateTime
Select @expDate = inserted.ExpirationDate from inserted
if (YEAR(@expDate) < 1971 )
BEGIN
UPdate Card set ExpirationDate = '1900-01-01 00:00:00' FROM Card, inserted
我对PL/SQL非常陌生,如果问题很明显,我很抱歉
根据,触发器有一个时间(条件)。我想使用一个,它需要一个子查询,但是,我有以下错误:
奥拉-02251
00000 -“此处不允许子查询”
*原因:语句中不允许子查询。
*操作:从语句中删除子查询。
我错过了什么?
我的情况如下:
CREATE OR REPLACE TRIGGER mytrigger AFTER UPDATE OF column ON THIS_TABLE
FOR EACH ROW
WHEN (NEW.status = 'approved' AND EXISTS (
SELECT *
我是PL/SQL的新手。我正在尝试编写一个在table A中插入的trigger,只要table B中有一个insert (要在表B中插入,下面的select必须返回1)。
SELECT 1
INTO v_exists
FROM TFRG V
WHERE
SUBSTR(:NEW.COD_OBJT, 1, 2) = V.CDP
AND SUBSTR(:NEW.COD_OBJT, 12, 2) = V.CDS
AND V.CDSIT = 'V'
AND V.CDG IN (‘E’,’
您好,我有一个简单的示例代码没有像我期望的那样在PL/SQL中运行:
declare
A NUMBER := NULL;
B NUMBER := NULL;
C NUMBER := NULL;
D NUMBER := NULL;
E NUMBER := 7;
BEGIN
IF A != NULL OR B != NULL OR C != NULL OR D != NULL OR E != NULL THEN
DBMS_OUTPUT.PUT_LINE('IF');
ELSE
DBMS_OUTPUT.PUT_LINE('ELSE');
END IF
我在运行这段代码时遇到了问题。它说触发器是用编译错误创建的,但没有解释错误所在,也没有给出任何输出。下面是我得到的代码和错误。我使用的是Oracle11gSQL,使用的是PL/ R1。
CREATE OR REPLACE TRIGGER checkRecommendedAge
BEFORE INSERT OR UPDATE ON Loan
FOR EACH ROW
DECLARE
borAge number;
ex exception;
BEGIN
SELECT count(*) INTO borAge
FROM Loan
WHERE date
我有一个pl/sql代码来发送电子邮件(这很好)。但是,我希望在user表中创建新条目时执行它,而忽略旧条目。
场景。输入新用户(pl/sql代码执行)。如果打开表而没有输入新用户(不执行pl/sql代码)。
如果2周后输入一个新用户(代码执行)
因此,只有在表中有新条目时才会执行代码。
下面是输入新用户时创建新ID的触发器
create or replace trigger "BI_TEST"
before insert on "TEST"
for each row
begin
if :NEW.
我很乐意得到对以下问题的支持:
如果我试图将PL/SQL-脚本与复合触发器和初始化部分集成在一起,它将在初始化部分的第一个";“之后被裁剪:
CREATE OR REPLACE TRIGGER MY_COMPOUND_TRIGGER
FOR INSERT OR UPDATE OR DELETE
ON COUNTRY
COMPOUND TRIGGER
--
-- Common or Initialization Section
--
strProgPos Varchar2(200) := 'START';
STATUS_V
这是我的SQL代码:
CREATE OR REPLACE TRIGGER Promjenaplacanja
BEFORE UPDATE
ON Placanje
FOR EACH ROW
DECLARE
v_PlacanjeID NUMBER(10,0);
v_Starinacin NVARCHAR2(50);
v_Novinacin NVARCHAR2(50);
BEGIN
BEGIN
SELECT :OLD.PlacanjeID ,
:OLD.Nacin_Placanja
INTO v_PlacanjeID,
v_Starinacin
我已经使用以下PL/SQL代码在Oracle APEX中创建了一个进程:
UPDATE RACUN SET
UKUPNO_RACUN = (SELECT SUM(S.IZNOS_STAVKE)
FROM STAVKA_RACUNA S
WHERE S.BROJ_RACUNA_STAVKE = BROJ_RACUNA);
但是,如何在SQL命令中为该代码创建触发器呢?
您好,我有一些问题,做一个pl/sql触发器。我想做一个触发器,做一个“历史”。我创建了一个表,用下面的代码记录触发器的sout: create table control(
camp1 varchar2(255)
); 它还不能工作,但我们已经很接近了。现在,在user:7623856的帮助下,当我执行以下命令时,我在SQL Developer enter image description here oracle 11中工作 这是新的代码 create or replace trigger t_auditar_alta_empleat
after insert on empleats
我想把我的头放在扳机上,但我发现了错误
错误(2,4):PL/ SQL :忽略SQL语句
错误(2,8):PL/SQL: ORA-00922:缺失或无效选项
创建以下触发器时:
CREATE TRIGGER TableTrigger
AFTER UPDATE ON TestTable
FOR EACH ROW
BEGIN
set serveroutput on format wrapped;
DBMS_OUTPUT.put_line('TABLE UPDATED!');
END;
它适用于下表:
CREATE TABLE TestTable
(
test1 IN
我对SQL触发器很陌生。
下面的触发器给了我一个错误:
错误: PL/SQL: ORA-00942:表或视图不存在
错误: PL/ SQL :忽略SQL语句
create or replace trigger HIST
after update of DATE ON EPISODE
for each row
begin
INSERT INTO HIST SELECT * FROM INSERTED;
end HIST;
任何帮助都将不胜感激。
我有一个SQL查询,其中我正在计算一个名为(a,b)的函数,并执行如下减法
case
when a=1 and b=0 then case when (c -cal(a,b)) >0 then cal(a,b) else c end
end
在这种情况下,我必须调用cal(a,b)两次,代价很高。
在oracle SQL中有没有什么方法可以存储这个函数的值,并且它是预先编写的SQL查询,所以我不能使用PL/SQL。
create or replace trigger calculation
before insert on booking
DECLARE name varchar2(20);
BEGIN
IF INSERTING THEN
select first_name into name from CUSTOMER where NIC =: NEW.NIC ;
dbms_output.put_line(name);
END IF;
end;
这里,NEW.NIC是预订表的属性。
它给我带来了以下错误:
错误: PLS-00801:内部错误ph2csql_strdef_to_di
我对Pl/SQL有点陌生,我正在尝试创建一个触发器,在每次对表的插入中,都会向表中插入更多的新值。例如,如果我将12.01插入表中,则触发器应插入12.01A、12.01B、12.01C。
这看起来很简单,我创建了下面的触发器,但是我遇到了一些错误。
create or replace trigger "BUILDRELEASEVERSIONS_T1"
AFTER
insert or update on "BUILDRELEASEVERSIONS"
for each row
begin
DECLARE
i number(1);
v_version
我正在PL/SQL上练习集合,现在我编写了一个简单的WHILE循环,在屏幕上打印稀疏关联数组的值。我收到了以下错误: Oracle 06502: PL/SQL:数值或值错误: NULL索引表键值。结果打印在屏幕上,但甲骨文的错误以及。谢谢。
SET SERVEROUTPUT ON
DECLARE
TYPE type_football_players IS TABLE OF VARCHAR2(45)
INDEX BY PLS_INTEGER;
v_costademarfil_2006 type_football_players;
v_counter PLS_IN
我有:
CREATE OR REPLACE FUNCTION aktualizujIloscPodan() RETURNS TRIGGER AS
$BODY$
DECLARE
n integer;
sid integer;
BEGIN
sid=0;
IF (TG_OP='INSERT') THEN
sid = NEW."studentID";
ELSIF (TG_OP='DELETE') THEN
sid = OLD."studentID";
END IF;
n = COALESCE ((SELECT
如果这个问题含糊不清,我很抱歉,我是SQL的新手,遇到了一些麻烦。我在试着找出每个重量组中的人数。计算该数量并显示每个类的数量。
我想我的问题出在THEN这个表达上。我需要为每个权重组创建一个变量来进行比较吗?
谢谢
SELECT
(CASE WHEN pl_weight <180 THEN 1
WHEN pl_weight >=180 AND pl_weight <200 THEN 2
WHEN pl_weight >=200 AND pl_weight <220 THEN 3
ELSE 4 END),
count(1) "Less than 280&