在Oracle中,用shell封装SQL实例,实例中包含表及存储
时间: 2024-02-10 16:10:27 浏览: 95
以下是一个使用Shell脚本封装Oracle SQL的示例,其中包含创建表和存储过程:
```bash
#!/bin/bash
# 定义变量
DB_HOST="localhost"
DB_PORT="1521"
DB_SID="orcl"
DB_USER="scott"
DB_PASS="tiger"
# 执行SQL语句
sqlplus -S $DB_USER/$DB_PASS@$DB_HOST:$DB_PORT/$DB_SID << EOF
-- 创建表
CREATE TABLE employees (
employee_id NUMBER(6) NOT NULL,
first_name VARCHAR2(20) NOT NULL,
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25),
phone_number VARCHAR2(20),
hire_date DATE NOT NULL,
job_id VARCHAR2(10) NOT NULL,
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
manager_id NUMBER(6),
department_id NUMBER(4)
);
-- 创建存储过程
CREATE OR REPLACE PROCEDURE get_employee_info (p_employee_id IN NUMBER, p_info OUT VARCHAR2) AS
v_first_name VARCHAR2(20);
v_last_name VARCHAR2(25);
v_job_id VARCHAR2(10);
BEGIN
SELECT first_name, last_name, job_id INTO v_first_name, v_last_name, v_job_id FROM employees WHERE employee_id = p_employee_id;
p_info := v_first_name || ' ' || v_last_name || ' (' || v_job_id || ')';
END;
/
-- 插入数据
INSERT INTO employees VALUES (100, 'Steven', 'King', 'steven.king@example.com', '515.123.4567', TO_DATE('1987-06-17', 'YYYY-MM-DD'), 'AD_PRES', 24000, NULL, NULL, 90);
INSERT INTO employees VALUES (101, 'Neena', 'Kochhar', 'neena.kochhar@example.com', '515.123.4568', TO_DATE('1989-09-21', 'YYYY-MM-DD'), 'AD_VP', 17000, NULL, 100, 90);
INSERT INTO employees VALUES (102, 'Lex', 'De Haan', 'lex.dehaan@example.com', '515.123.4569', TO_DATE('1993-01-13', 'YYYY-MM-DD'), 'AD_VP', 17000, NULL, 100, 90);
-- 执行存储过程
DECLARE
v_info VARCHAR2(100);
BEGIN
get_employee_info(100, v_info);
dbms_output.put_line(v_info);
END;
/
-- 查询数据
SELECT * FROM employees;
-- 结束SQL语句
EOF
```
在该脚本中,我们定义了连接数据库所需的变量,并使用sqlplus命令执行SQL语句。在这个例子中,我们创建了一个名为“employees”的表,并创建了一个名为“get_employee_info”的存储过程,以获取员工信息。然后,我们插入了三行数据,并使用存储过程获取了员工100的信息。最后,我们使用SELECT语句查询了表中的所有数据。您可以根据需要修改SQL语句,以执行不同的任务。
阅读全文