php技术和开源cms使用
php/oracle:使用php建里oracle表(分表)
oracle的建表操作有这些元素:
1. 表名,建立分表的时候表示是动态的。可以按照时间区分。
2. 建立表结构和字段。
3. 字段添加注释。
4. 字段添加约束。
5. 建立索引。
其中,建字段直接一条sql执行所有字段的创建;注释、约束和索引都需要单独的sql分开执行,多条(例如给每个字段添加注释)的时候也要分开执行sql。
需求实例: 为VISIT_TEST表创建分表,表名规则是后缀加两个字符的年月如VISIT_TEST_2301。
$fixname='_2201';//分表区分名 _2201 实际使用动态获取当前日期 $sql1="CREATE TABLE VISIT_TEST".$fixname." ( V_LOG_ID NUMBER(36,0) NOT NULL, V_LOG_UUID VARCHAR2(120 BYTE), V_LOG_IP VARCHAR2(180 BYTE), V_LOG_REFERERNAME VARCHAR2(180 BYTE) ) LOGGING NOCOMPRESS PCTFREE 10 INITRANS 1 STORAGE ( INITIAL 262144 NEXT 262144 MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT ) PARALLEL 1 NOCACHE DISABLE ROW MOVEMENT "; //添加注释 $sql2_1="COMMENT ON COLUMN VISIT_TEST".$fixname.".V_LOG_UUID IS '唯一用户id'"; $sql2_2="COMMENT ON COLUMN VISIT_TEST".$fixname.".V_LOG_REFERERNAME IS '来源页页面类型'"; //添加约束 $sql3="ALTER TABLE VISIT_TEST".$fixname." ADD CONSTRAINT SYS".$fixname." CHECK ('V_LOG_ID' IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE"; //添加索引 $sql4_1="CREATE INDEX idx_pagename".$fixname." ON VISIT_TEST".$fixname." (V_LOG_PAGENAME ASC) LOGGING VISIBLE PCTFREE 10 INITRANS 2 STORAGE ( INITIAL 262144 NEXT 262144 MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT )"; $sql4_2="CREATE INDEX index_time".$fixname." ON VISIT_TEST".$fixname." (V_LOG_TIME ASC) LOGGING VISIBLE PCTFREE 10 INITRANS 2 STORAGE ( INITIAL 262144 NEXT 262144 MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT )"; //oracle连库 $conn=oci_connect("库名", '密码', '主机地址ip:端口/服务名'); //封装方法 function docreate($sql){ global $conn; if(is_array($sql)){ $do=array(); foreach($sql as $v){ $stmt = oci_parse($conn, $v); $temp=oci_execute($stmt); array_push($do,$temp); } }else{ $stmt = oci_parse($conn, $sql); $do=oci_execute($stmt); } return $do; } //执行操作 $do1=docreate($sql1); $do2=docreate(array($sql2_1,$sql2_2));//多个元素的时候每个sql会分开执行 $do3=docreate($sql3); $do4=docreate(array($sql4_1,$sql4_2));