用shell封装SQL
时间: 2023-07-01 22:12:18 浏览: 130
可以使用Shell脚本来封装SQL语句,以便批量执行SQL语句或自动化执行SQL语句的任务。以下是一个使用Shell脚本封装SQL的示例:
```bash
#!/bin/bash
# 连接数据库
mysql -u root -p123456 -D testdb << EOF
# 执行SQL语句
SELECT * FROM users WHERE age > 18;
# 结束SQL语句
EOF
```
在该脚本中,通过使用“<< EOF”和“EOF”来封装SQL语句。在“<< EOF”后面的所有内容都将被视为SQL语句,直到遇到“EOF”为止。在这个例子中,我们连接到名为“testdb”的数据库,并执行一个简单的SELECT语句,以返回所有年龄大于18岁的用户。您可以根据需要修改SQL语句以执行不同的任务。
相关问题
用shell封装SQL实例
下面是一个使用Shell脚本封装SQL的实例,以便批量执行SQL语句:
```bash
#!/bin/bash
# 定义变量
DB_HOST="localhost"
DB_PORT="3306"
DB_NAME="mydb"
DB_USER="root"
DB_PASS="password"
# 执行SQL语句
mysql -h $DB_HOST -P $DB_PORT -u $DB_USER -p$DB_PASS $DB_NAME << EOF
# 创建表
CREATE TABLE IF NOT EXISTS users (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
# 插入数据
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com');
INSERT INTO users (name, email) VALUES ('Charlie', 'charlie@example.com');
# 查询数据
SELECT * FROM users;
# 结束SQL语句
EOF
```
在这个例子中,我们首先定义了连接数据库所需的变量,然后使用mysql命令来执行SQL语句。在这个脚本中,我们创建了一个名为“users”的表,并插入了三行数据。然后,我们使用SELECT语句查询了表中的所有数据。您可以根据需要修改SQL语句,以执行不同的任务。
在Oracle中,用shell封装SQL实例,实例中包含表及存储
以下是一个使用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语句,以执行不同的任务。
阅读全文