sql - 将值插入表 Oracle SQL

标签 sql oracle database-design insert-into

我正在尝试将值插入到 Oracle SQL 中的“员工”表中。我有一个关于输入由外键确定的值的问题:

我的员工有 3 个由外键确定的属性:State、Position 和 Manager。我正在使用 INSERT INTO语句插入值并手动输入数据。我是否需要物理查找每个引用来输入数据,或者是否有我可以使用的命令?例如

INSERT INTO Employee 
(emp_id, emp_name, emp_address, emp_state, emp_position, emp_manager)
VALUES 
(001, "John Doe", "1 River Walk, Green Street", 3, 5, 1000)

这应该用 (John Doe, 1 River Walk, Green Street, New York, Sales Executive, Barry Green) 填充员工表.纽约是 state_id=3State表;销售主管是 position_id=5positions表;和巴里格林是 manager_id=1000manager表。

有没有办法输入引用表的文本值,以便 Oracle 识别文本并将其与相关 ID 匹配?我希望这个问题有意义会很乐意澄清任何事情。

谢谢!

最佳答案

您可以使用以下函数,以便在插入之前从数据库中提取更多参数:

--
-- insert_employee  (Function) 
--
CREATE OR REPLACE FUNCTION insert_employee(p_emp_id in number, p_emp_name in varchar2, p_emp_address in varchar2, p_emp_state in varchar2, p_emp_position in varchar2, p_emp_manager in varchar2) 
RETURN VARCHAR2 AS

   p_state_id varchar2(30) := '';
 BEGIN    
      select state_id 
      into   p_state_id
      from states where lower(emp_state) = state_name;

      INSERT INTO Employee (emp_id, emp_name, emp_address, emp_state, emp_position, emp_manager) VALUES 
                (p_emp_id, p_emp_name, p_emp_address, p_state_id, p_emp_position, p_emp_manager);

    return 'SUCCESS';

 EXCEPTION 
   WHEN others THEN
    RETURN 'FAIL';
 END;
/

关于sql - 将值插入表 Oracle SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10422024/

相关文章:

MySQL IF 存在 INSERT else INSERT 过程

sql - 减去时间戳

sql - Oracle:使用 SQL 或 PL/SQL 在动态 SQL 中查找错误的位置

.net - 使用 oracle (.Net Connector) 描述查询

php - Mysql REPLACE 不工作

mysql - 仅订购 DATETIME 直到分钟标记 (MySQL)

java - 如何使用 java 读取从存储过程返回的类型数组?

orm - DAL 和 ORM 之间的界线在哪里?

postgresql - 存储过程中的业务逻辑与中间层

mysql - 在谷歌云 sql (mysql) 数据库表与枚举列中管理主数据的最佳方式