位置:首页 > 网络编程 > php&cms
点击展开栏目简介
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));


上篇:php:实现(php或shtml)require/include包含文件带参数

发表评论 ​共有​条评论
  • 匿名发表