SQLdeveloper,在Scott用户下,接收一个雇员名,显示该雇员的所有内容(用%rowtype实现,把整行数据读入变量中),当没有这个雇员时( no _ data_ found ),用异常来显示错误提示(提示:输入姓名需加引导)
时间: 2024-11-15 14:28:48 浏览: 12
在SQL Developer中,你可以使用%ROWTYPE特性配合异常处理来获取雇员信息。`%ROWTYPE`是一个隐含的数据类型,它包含了当前查询结果集中的每一行数据。以下是一个示例脚本,展示如何在一个存储过程或匿名块中实现这一功能:
```sql
DECLARE
v_employee_name VARCHAR2(50); -- 声明一个变量来存储雇员名
v_employee_rec EMP%ROWTYPE; -- 定义一个%ROWTYPE类型的变量来存放查询结果
BEGIN
-- 设置SQL查询
v_employee_name := '&employee_name'; -- 使用&符号捕获命令行输入
IF v_employee_name LIKE '%%' THEN
RAISE_APPLICATION_ERROR(-20001, '请输入包含名字的完整字符串,例如 "John Doe"'); -- 当输入不符合要求时抛出异常
ELSE
BEGIN
-- 使用动态SQL避免SQL注入风险
EXECUTE IMMEDIATE
'SELECT * FROM emp WHERE first_name = :name OR last_name = :name'
INTO v_employee_rec
USING v_employee_name;
-- 检查是否找到匹配的数据
IF v_employee_rec IS NOT NULL THEN
DBMS_OUTPUT.PUT_LINE(v_employee_rec); -- 显示整行数据
ELSE
DBMS_OUTPUT.PUT_LINE('No data found for the provided name.');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No data found for the employee with that name.');
END;
END IF;
END;
/
-- 在命令行中运行此脚本并提供员工姓名,如:@your_script_name John Doe
```
这个脚本首先从命令行获取输入的雇员名,如果输入不符合要求(只包含空格),则会抛出异常。如果找到了匹配的记录,就打印出来;如果没有找到,则显示相应的错误提示。
注意在实际应用中,你需要确保使用动态SQL时的安全性,以防SQL注入攻击。
阅读全文