dポイントプレゼントキャンペーン実施中!

http://okwave.jp/qa2956072.html
上で同じような質問を過去にしましたが、状況がちょっと違うようでしたので再度質問させてください。

列の型をserialで指定しテーブルを作りました。
入力を省略したところPermission Deniedのエラーが出ました。
前回の質問では権限が異なるIDでINSERTしようとしたのでは?と回答をいただきましたが、状況がちょっと違っていたようです。

$sth = $dbh->do("insert into $table (filepath,filename,filesize,confirmdate,upload,filenumber) values ('$list[$count]->[0]','$list[$count]->[1]','$list[$count]->[2]','$today','$today','12')");

と入力すると12という番号でINSERTできます。
$sth = $dbh->do("insert into $table (filepath,filename,filesize,confirmdate,upload) values ('$list[$count]->[0]','$list[$count]->[1]','$list[$count]->[2]','$today','$today')");

しかし上記のように省略するとエラーが出ます。
本にも省略した場合自動的に番号が割り振られるとありますが、具体的にどう省略したらよいのでしょうか?
よろしくお願いします。

A 回答 (2件)

>しかし上記のように省略するとエラーが出ます。



具体的には、どういうエラーですか?

下記の例のように、serial指定列を省略して、格納可能です。

<定義例>
create table t1
(c1 serial,
c2 int);

<格納例>
insert into t1(c2) values(100);

明示的にnextvalで指定する場合は、連番型につけられた名前を指定する必要があります。この名前は、「表名_列名_seq」という名前になります。

上記の例では、次のようなSQLで格納できます。

<格納例2>
insert into t1 values(nextval('t1_c1_seq'),200);

参考URL:http://www.postgresql.jp/document/pg800doc/html/ …
    • good
    • 0
この回答へのお礼

ありがとうございます。
シーケンス名を入れなくてはいけなかったんですね。
そこがよくわかっていませんでした。
おかげで解決いたしました。
ありがとうございました。

お礼日時:2007/11/04 14:43

]->[2]','$today','$today','12')");


の12の部分に値を入れる必要があるので、「次の値」nextvalueを記述。
(Oracleも同じ)。


「PostgreSQL SERIAL NEXTVALUE」をキーワードに検索してみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
検索してみましたところ、
INSERT INTO distributors VALUES (nextval('serial'), 'nothing');
という使用例がありましたので、
12の代わりにnextval('serial')といれてみましたがエラーがでました。
他にもnextval('')とかnextvalとかnextval('?')とかもいれてみたんですが、全部エラーになってしまいました。
nextvalueともいれてみましたが同じくエラーになりました。
正確な構文ってどう書けばいいのでしょうか??

お礼日時:2007/07/24 21:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!