建表
CREATE TABLE Persons(Id int , LastName varchar(255))
插入
INSERT INTO Table VALUES (Value,Value,Value);
INSERT INTO Table (Column,Column) VALUES (Value,Value);
INSERT INTO Table SELECT ... FROM ... WHERE ...;(从另外的表中直接插入)
更新
UPDATE Table SET Column = Value, Column = Value, Column = Value WHERE condition;
删除
DELETE FROM Table WHERE Condition;
truncate table 表名称
drop table 表名称 (删掉表)
查询
Select * fom 表名称
基本模式
SELECT Column, Column, Count(*)
FROM Table [AS] T
WHERE Condition
GROUP BY Column, Column
HAVING Group Condition
ORDER BY Column ASC[默认], Column DESC;
添加删除主键
ALTER TABLE PERSONS ADD PRIMARY KEY ( id );
ALTER TABLE PERSONS DELETE PRIMARY KEY
触发器
ALTER TRIGGER TEST4HANA.MyTrigger after Insert ON TEST4HANA.TEST01
BEGIN
DECLARE
insert into "TEST4HANA"."OAS_Student" values(5,'23',23,'r34');
END
只读型存储过程
CREATE PROCEDURE {schema.}name {({IN|OUT|INOUT}
param_name data_type {,...})}
{LANGUAGE <LANG>} {SQL SECURITY <MODE>}
{READS SQL DATA {WITH RESULT VIEW <view_name>}} AS
BEGIN
...
END
删除:
语法:DROP PROCEDURE {schema.}name {CASCADE}
修改:
ALTER PROCEDURE {schema.}name RECOMPILE {WITH PLAN}
sample:
CREATE PROCEDURE ProcWithResultView(IN id INT, OUT o1 CUSTOMER)
LANGUAGE SQLSCRIPT READS SQL DATA WITH RESULT VIEW ProcView AS
BEGIN
o1 = SELECT * FROM CUSTOMER WHERE CUST_ID = :id;
END;
循环插入存储过程
CREATE procedure "SYSTEM"."TEST_INSERT"
(in I integer,in J integer)
as begin
declare X integer := I;
while X < :J do
X := :X + 1;
insert into SYSTEM.TEST("ID","NAME","COL1","COL2","COL3","COL4","COL5","COL6","COL7","COL8","COL21","COL22","COL23","COL24","COL25","COL26","COL51","COL52","COL53","COL54") values (X, 'A', 101 , 102, 103, 104, 105, 106, 107, 108, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16,'a','b','c','d');
if MOD (X, 100)=0
then
commit;
end if;
end while;
end;
调用存储过程
call 存储过程名(参数)
例:call WHILE_LOO·P_FACTORIAL_PROCEDURE(10)
删除存储过程
DROP PROCEDURE <proc_name> [<drop_option>]
Example:
DROP PROCEDURE my_proc;
修改存储过程
Synatx:
ALTER PROCEDURE <proc_name> RECOMPILE [WITH PLAN]
Example:
ALTER PROCEDURE my_proc RECOMPILE WITH PLAN;
建议:一般项目中对存储过程进修改的话 是对其drop 然后在create 然后在create中修改相应的部位
新建table function
create function scale(val int)
returns table(a int , b int) language sqlscript as
begin
return select a , :val * b as b from mytab02 ;
end;
调用table function
select * from scale(10);
select * from scale(10) as a, scale(10) as b from mytab;
查看函数、存储过程等文本
call get_object_definition('A_SCHEMA_NAME','A_TABLE_NAME');
例:call get_object_definition('SYSTEM','AFLPM_CREATOR');
查找所有表
select * from tables where schema_name='ORAPS';
查看表结构
SELECT * FROM TABLE_COLUMNS WHERE SCHEMA_NAME='ORAPS' AND TABLE_NAME = 'TEST'
查看主键
select * from "CONSTRAINTS" where SCHEMA_NAME='ORAPS'
查找所有存储过程
select * from sys.procedures where SCHEMA_NAME='ORAPS'
select * from "PROCEDURE_PARAMETERS" where SCHEMA_NAME='ORAPS'
字母,数字带单引号,双引号等区别
SELECT a, 'b', "c", 1, '2', "3" FROM "4"
hana数据类型
数字(Numeric)
TinyINT - 存储8位无符号整数。最小值:0,最大值:255
SMALLINT - 存储16位有符号整数。最小值:-32,768,最大值:32,767
INTEGER - 存储32位有符号整数。最小值:-2,147,483,648,最大值:2,147,483,648
BIGINT - 存储64位有符号整数。最小值:-9,223,372,036,854,775,808,最大值:9,223,372,036,854,775,808
SMALL - 十进制和十进制。最小值:-1038+1和最大值:1038-1
REAL - 最小值:-3.40E + 38,最大值:3.40E + 38
DOUBLE - 存储64位浮点数。最小值:-1.7976931348623157E308,最大值:1.7976931348623157E308
字符/字符串(Character/ String)
Varchar - 最多8000个字符。
Nvarchar - 最大长度为4000个字符。
ALPHANUM - 存储字母数字字符。整数的值介于1到127之间。
SHORTTEXT - 存储支持文本搜索功能和字符串搜索功能的可变长度字符串。
二进制(Binary)
二进制类型用于存储二进制数据的字节。
VARBINARY - 以字节存储二进制数据。最大整数长度在1到5000之间。
布尔值(Boolean)
布尔数据类型存储布尔值,它们为TRUE,FALSE
日期时间(Date Time)
这些数据类型用于在HANA数据库的表中存储日期和时间。
DATE - 数据类型由年,月和日信息组成,以表示列中的日期值。日期数据类型的默认格式是YYYY-MM-DD。
TIME - 数据类型由HANA数据库的表中的小时,分钟和秒值组成。时间数据类型的默认格式为HH:MI:SS。
SECOND DATE - 数据类型由HANA数据库的表中的年,月,日,时,分,秒值组成。SECONDDATE数据类型的默认格式是YYYY-MM-DD HH:MM:SS。
TIMESTAMP - 数据类型由HANA数据库的表中的日期和时间信息组成。TIMESTAMP数据类型的默认格式为YYYY-MM-DD HH:MM:SS:FFn,其中FFn表示秒的分数。
大型对象(Large Objects)
LARGEOBJECTS用于存储大量数据,如文本文档和图像。
NCLOB - 存储大型的UNICODE字符对象。
BLOB - 存储大量的二进制数据。
CLOB - 存储大量的ASCII字符数据。
TEXT - 它启用文本搜索功能。这种数据类型只能为列存储表定义,而不能为行存储表定义。
BINTEXT - 支持文本搜索功能,但可以插入二进制数据。
多值(Multi-Valued)
多值数据类型用于存储具有相同数据类型的值的集合。