昨天我正在编写一些任务,让我感到震惊的是,当我使用pl/sql时,我并不知道检查表中是否存在行的正确和接受方式.
例如,让我们使用表格
PERSON(ID, Name);
Run Code Online (Sandbox Code Playgroud)
显然我做不到(除非有一些秘密方法)类似于:
BEGIN
IF EXISTS SELECT id FROM person WHERE ID = 10;
-- do things when exists
ELSE
-- do things when doesn't exist
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
所以我解决它的标准方法是:
DECLARE
tmp NUMBER;
BEGIN
SELECT id INTO tmp FROM person WHERE id = 10;
--do things when record exists
EXCEPTION
WHEN no_data_found THEN
--do things when record doesn't exist
END;
Run Code Online (Sandbox Code Playgroud)
但是我不知道它是否被接受的方式,或者如果有更好的检查方法,如果有人可以与我分享他们的智慧,我真的会感到高兴:)
干杯.
各位程序员大家好,祝大家新年快乐!
我寒假的大学任务很少,其中之一是在桌子上创建触发器:
PERSON(ID, Name, Surname, Age);
Run Code Online (Sandbox Code Playgroud)
触发器应该在用户插入带有无效 ID 的行时通知用户。Vadility 标准是 ID 的长度为 11 位。
我试着写这样的解决方案:
CREATE OR REPLACE TRIGGER person_id_trigg
AFTER INSERT
ON person
DECLARE
idNew VARCHAR(50);
lengthException EXCEPTION;
BEGIN
SELECT id INTO idNew FROM INSERTED;
IF LENGTH(idNew) <> 11 THEN
RAISE lengthException;
END IF;
EXCEPTION
WHEN lengthException THEN
dbms_output.put_line('ID for new person is INVALID. It must be 11 digits long!');
END;
Run Code Online (Sandbox Code Playgroud)
然后我意识到 INSERTED 只存在于 sqlserver 中,而不存在于 oracle 中。
你建议我能做些什么来解决这个问题?
提前致谢!
我正在使用React,我需要获取滚动方向才能做一些事情。我有一个有效的代码,但对如何存储和更新以前的滚动位置一无所知。
这是我的代码:
componentDidMount(){
const prev = window.scrollY;
window.addEventListener('scroll', e => this.handleNavigation(e, prev);
}
Run Code Online (Sandbox Code Playgroud)
这里的可见问题是componentDidMount 仅触发一次,因此当我尝试执行以下操作时:
handleNavigation = (e, prev) =>{
const window = e.currentTarget;
if(prev > window.scrollY){
console.log("scrolling up");
}
else if(prev < window.scrollY){
console.log("scrolling down");
}
};
Run Code Online (Sandbox Code Playgroud)
它可以正确地比较值,但prev永远都不会改变,因此无法按预期工作。我该如何运作?
我是否将prev放在时间间隔内以更新值或类似的东西?
oracle ×2
plsql ×2
sql ×2
ecmascript-6 ×1
javascript ×1
reactjs ×1
scroll ×1
select ×1
triggers ×1